在使用Kendo MVVM框架的Kendo應用程序中:我有一個「全局」viewModel,它是應用程序所有部分共有的信息 - 例如, UserState,它有一個屬性isLoggedIn。在多視圖模型中使用kendo observable屬性
許多不同的視圖和ViewModels訪問userState對象(從我所看到的,1視圖綁定到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()來改變isLoggedIn的價值userStateViewModel它不會更新。運行並單擊按鈕以查看問題 - 綁定不會反映更新後的值(但警報框會這樣)。任何幫助表示感謝,謝謝。
注意:這是一個earlier question的延伸,這讓我更深入一點。
@Rodney,我已經稍微簡化了LarsHöppner解決方案之後的原始代碼,請在此處查看:http://jsfiddle.net/OnaBai/E7ZFe/3/。我認爲理解和做同樣的事情更簡單。 – OnaBai
非常感謝您的幫助! – Rodney