在使用 Kendo MVVM 框架的 Kendo 应用程序中:我有一个“全局”视图模型,它是应用程序所有部分共有的信息 - 例如 UserState,它有一个属性 isLoggedIn。
许多不同的 View 和 ViewModel 访问 userState 对象(据我所知,1 View 绑定到 Kendo 中的 1 ViewModel)。
例如,如果未通过身份验证,我的主页可能会显示登录按钮。然后,一旦您登录,所有其他屏幕的行为都会有所不同,因此每个 ViewModel 都需要引用 UserState 对象。但是,如果其中任何一个更改了它,那么所有其他视图都应该更新,因为我使用了 Kendo Observable 对象。这似乎不起作用。
我在这里设置了一个简单的例子来说明问题:http: //jsfiddle.net/rodneyjoyce/uz7ph/11
var app = new kendo.mobile.Application();
userState = (function ()
{
var userStateViewModel = kendo.observable({
isLoggedIn: false
});
function loginUser()
{
userStateViewModel.set("isLoggedIn", true);
alert('Logged in');
};
return {
userStateViewModel: userStateViewModel,
loginUser: loginUser
}
})();
var viewModel1 = kendo.observable({
label: 'ViewModel1',
isLoggedInVM1: function() {
return userState.userStateViewModel.get("isLoggedIn");
},
logIn: function ()
{
//when calling LoginUser from here, the binding is not updated, even though the value is changed (true)
userState.loginUser();
alert('After Login viewModel1.isLoggedInVM1() = ' + viewModel1.isLoggedInVM1() + ' but the binding has not updated');
}
});
alert('Value onLoad = ' + viewModel1.isLoggedInVM1());
//If you uncomment this and call LoginUser from here then afterwards the binding changes to true, but not if you call it from within ViewModel1
//userState.loginUser();
kendo.bind($("#testForm"), viewModel1);
当我调用 userState.loginUser() 来更改 userStateViewModel 中 isLoggedIn 的值时,它不会更新。运行并单击按钮以查看问题 - 绑定不反映更新的值(但警报框会)。任何帮助表示赞赏,谢谢。
注意:这是对较早问题的扩展,它让我更进一步。