Kendo MVVM フレームワークを使用する Kendo アプリ: アプリのすべての部分に共通の情報である「グローバル」ビューモデルがあります。たとえば、プロパティ isLoggedIn を持つ UserState です。
多くの異なる View と ViewModel が userState オブジェクトにアクセスします (Kendo では、1 つの View が 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);
userStateViewModel の isLoggedIn の値を変更するために userState.loginUser() を呼び出しても、更新されません。ボタンを実行してクリックすると、問題が表示されます。バインディングには更新された値が反映されません (ただし、アラート ボックスには反映されます)。どんな助けでも感謝します、ありがとう。
注:これは、以前の質問の延長であり、少し先に進みました。