2016-11-20 52 views
0

我有一个菜单栏,一个div,我只希望看到,如果用户进行身份验证。我的JavaScript文件有这样的代码:访问主viewmodel的孩子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 /用户/ GET”,并得到了用户对象,然后填充与名称视图模型和如果用户被认证。

该视图模型(尽管有两个其他视图模型)被分配给主视图模型。

在我的html中,我尝试将数据绑定到该视图模型的'IsAuthenticated'属性以使可见性。

data-bind="visible: userVm.IsAuthenticated" 

但它似乎无法看到userVm.IsAuthenticated。

如何访问该属性?

回答

0

通常,问题在于,在数据绑定点上,您处于不同的绑定上下文中。但很难说,没有看到更多的视图(HTML)。

您可以使用$parent,$parents$root来遍历绑定上下文树。在你的情况下,从任何绑定的情况下,你可以使用$root来指代vm。你会这样写:

data-bind="visible: $root.userVm.IsAuthenticated"