2013-02-21 123 views
0

我有这样的视图模型和功能将数据添加到它,动态将数据添加到observableArray

 function viewModel() { 
      this.loadData = function() { 
       this.Items().push('X'); 
       this.Items().push('Y'); 
      }; 

      this.Items = ko.observableArray(['A', 'B']); 
     } 

     var vm = new viewModel(); 
     ko.applyBindings(vm); 
     vm.loadData(); 
     alert(vm.Items()); 

我想打印出的项目数组中的值,但X和Y从不显示。尽管警报弹出了A,B,X和Y.我做错了什么?

<div data-bind="foreach: {data: Items, as: 'item' }"> 
     <span data-bind="text: item"></span> 
    </div>   

谢谢。

回答

1

this.Items()公开底层数组ko.observableArray(),这只是一个正常的数组。您需要使用此:

this.Items.push('X'); 
this.Items.push('Y'); 

demo

+0

我有点困惑何时使用this.Items和何时使用this.Items()?我以为我应该总是使用Items() - 我昨天发布了类似的问题,http://stackoverflow.com/questions/14992898/observable-object-not-displaying-some-properties – user471317 2013-02-21 18:31:43

+1

当你想要时使用'this.Items'当你改变数组的内容时,KnockOut会发生'魔术'('this.Items' * *看起来像一个数组,但不是真的;它是一个模仿数组的特殊的KnockOut类型;'this.Items() '返回存储数据的实际数组,但这不是'魔术')。你的另一个问题使用可观察的而不是可观察的数组,这是两个不同的事情。 – robertklep 2013-02-21 18:42:49

0

您应该直接推数据this.Items。

this.Items()返回observableArray的内容。