kendo mvvm kendo-ui

mvvm - Cómo usar una propiedad observable de kendo en viewModels múltiples



kendo mvvm (1)

Cuando lo haces isLoggedInVM1: userStateviewModel.isLoggedIn en la inicialización de viewModel1 , estás asignando el valor que tiene en ese momento preciso en el tiempo ( false ). En cambio, use una función que obtenga el valor.

var viewModel1 = kendo.observable({ label: ''From ViewModel1'', isLoggedInVM1: function() { return userStateviewModel.get("isLoggedIn"); } });

Luego, cuando intente verificar isLoggedInVM1 haga lo siguiente:

alert(viewModel1.isLoggedInVM1());

o

<h3 data-bind="text: isLoggedInVM1()"></h3>

Su JSFiddle modificado aquí: http://jsfiddle.net/OnaBai/uz7ph/6/

En una aplicación de Kendo que utiliza el marco MVVM de Kendo: Tengo un modelo de vista "global" que es información que es común a todas las partes de la aplicación, por ejemplo, el UserState, que tiene una propiedad isLoggedIn.

Muchas vistas diferentes y modelos de vista acceden al objeto userState (por lo que puedo ver, 1 vista está vinculada a 1 ViewModel en Kendo).

Por ejemplo, mi página de inicio puede mostrar el botón de inicio de sesión si no están autenticados. Luego, todas las otras pantallas se comportan de manera diferente una vez que haya iniciado sesión, por lo que cada ViewModel necesita hacer referencia al objeto UserState. Sin embargo, si alguno de ellos lo cambia, todas las demás Vistas deberían actualizarse, ya que utilicé un objeto observable de Kendo. Parece que esto no funciona.

Configuré un ejemplo simple aquí para ilustrar el problema: http://jsfiddle.net/rodneyjoyce/uz7ph/4/

var app = new kendo.mobile.Application(); var userStateviewModel = kendo.observable({ isLoggedIn: false, }); var viewModel1 = kendo.observable({ label: ''From ViewModel1'', isLoggedInVM1: userStateviewModel.isLoggedIn }); userStateviewModel.set(''isLoggedIn'', true); //viewModel1.set(''isLoggedInVM1'', userStateviewModel.isLoggedIn); alert(viewModel1.isLoggedInVM1); kendo.bind($("#testForm"), viewModel1);

muchas vistas diferentes utilizan UserStateViewModel, por lo que en ViewModel1 expongo la propiedad iSloggedIn y me enlace a ella en la vista (comienza como falso).

Luego, el código lo establece en verdadero en userStateViewModel, por lo que necesito que todas las instancias de observación cambien a true, pero esto no funciona. Si hago un comentario sobre esta línea de código //viewModel1.set(''isLoggedInVM1 '', userStateviewModel.isLoggedIn);

entonces funcionará, pero esto derrota el punto de un observable ya que no sé cuál de los 10 ViewModels lo actualizará y cuándo, pero todas las vistas necesitan actualizar el nuevo valor ...