2016-11-20 5 views
0

私は、ユーザーが認証されている場合にのみ表示したいdivがあるメニューバーを持っています。私のJavaScriptファイルは、このコードがありますので、メインビューモデルの子VMにアクセス

var UserViewModel = function() { 
    var self = this; 

    self.Name = ko.observable(""); 
    self.IsAuthenticated = ko.observable(false); 

    self.SignOut = function() { 
     var uri = '/api/User/Logout' 
     $.getJSON({ url: uri, contentType: "application/json" }) 
      .done(function() { 
       window.location.href = "/Pages/Index"; 
      }); 

    } 

} 


$(document).ready(function() { 

    var vm = { 
     loginVm : new LoginViewModel(), 
     registerVm: new RegisterViewModel(), 
     userVm: new UserViewModel() 
    } 


    var uri = '/api/User/Get' 
    $.getJSON({ url: uri, contentType: "application/json" }) 
     .done(function (data) { 
      vm.userVm.Name(data.Name); 
      vm.userVm.IsAuthenticated(data.IsAuthenticated); 
     }); 

    ko.applyBindings(vm, $('#LayoutSection')[0]); 
    GetTimezones(); 
}); 

を、画面負荷、それは呼び出しを行う際に「/ API /ユーザー/取得」およびユーザーオブジェクトを取得し、その後、名前のビューモデルを移入し、ユーザーが認証されている場合

他の2つのビューモデルでも、そのビューモデルはメインビューモデルに割り当てられます。

私のHTMLでは、データをそのビューモデルの 'IsAuthenticated'プロパティにバインドして可視性を持たせようとしています。

data-bind="visible: userVm.IsAuthenticated" 

ただし、userVm.IsAuthenticatedは表示されないようです。

どうすればそのプロパティにアクセスできますか?

答えて

0

通常、問題はデータバインドの時点で異なるバインディングコンテキストにあることです。あなたのビュー(HTML)をもっと見ることなく、わかりにくいです。

バインディングコンテキストツリーを移動するには、$parent,$parentsまたは$rootを使用できます。あなたのケースでは、任意のバインディングコンテキストから$rootを使用してvmを参照することができます。あなたはこう書いています:

data-bind="visible: $root.userVm.IsAuthenticated" 
関連する問題