2013-10-20 29 views
0

我正在做一个包含菜单和子菜单的导航列表。KnockoutJS - 创建对象不起作用

我有以下结构:

function Menu(navigation) { 

    this.NavigationUrl = ko.observable(navigation.NavigationUrl); 
    this.NavigationTitle = ko.observable(navigation.NavigationTitle); 
    this.NavigationDescription = ko.observable(navigation.NavigationDescription); 

    var mappedChildren = ko.utils.arrayMap(navigation.Children, function (child) { 
     return new Menu(child); 
    }); 

    this.Children = ko.observableArray(mappedChildren); 
} 

function DashboardViewModel() { 

    var self = this; 
    self.LoggedUser = ko.observable(""); 
    self.Navigations = ko.observableArray([]); 

    $.get('/Home/DashboardDependencies', {}, function (result) { 

     self.LoggedUser(result.LoggedUser); 

     var mappedNavigations = ko.utils.arrayMap(result.Navigations, function (item) { 
      var menu = new Menu(item); 

      // When I alert item, the result appears properly: 
      // { "NavigationTitle": "blah", "NavigationDescription": "bleh" [...] } 
      alert(JSON.stringify(item)); 

      // But when I alert the new menu object, the result doesn't appear: 
      // Just: "{}" 
      alert(JSON.stringify(menu)); 

      return menu; 
     }); 
     self.Navigations = mappedNavigations; 
    }); 
} 

ko.applyBindings(new DashboardViewModel()); 

因此,检查出来。当我尝试提醒项目变量时,结果显示正确。当我尝试提醒新的Menu对象时,结果只显示{}。为什么这个'发生?

谢谢大家的帮助!

+0

[Observable的设置值在Knockout中未更新](http://stackoverflow.com/questions/19391415/setting-value-of-observable-not-updating-in-knockout) –

回答

0

self.Navigations = ..确实不是更新现有的可观察数组。因此,视图绑定的可观察数组永远不会更新,并且视图永远不会更新。代替self.Navigations(..)

+0

工程像一个魅力!谢谢! – Kiwanax