2013-02-21 135 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的內容。