2012-03-01 44 views
9

請看看這個例子。 http://jsfiddle.net/LdeWK/2/Knockout JS - 如何正確綁定一個observableArray

我想知道如何綁定可觀察數組的值。我知道上面的例子中的問題,它是這條線

<p>Editing Fruit: <input data-bind="value: $data" /></p> 

$ data是實際值,而不是您通常會綁定的可觀察函數。 這似乎應該是一個非常簡單的過程,但我無法弄清楚。

在其他情況下,我使用了可觀察數組,並有一個可觀察對象作爲可觀察數組的每個元素。我想知道如何才能使用可觀察數組來工作。

感謝

回答

17

如果綁定讀/寫在一個數組或observableArray物品,那麼他們將需要一個對象的屬性。否則,$data將是未展開的可觀察值,並且KO無法寫入實際可觀察​​值。

你將不得不做這樣的事情:

var ViewModel = function(myFruit) { 
    var observableFruit = ko.utils.arrayMap(myFruit, function(fruit) { 
     return { name: ko.observable(fruit) }; 
    }); 
    this.fruit = ko.observableArray(observableFruit); 
}; 


ko.applyBindings(new ViewModel(["Apple", "banana", "orange"])); 

這裏有一個例子:http://jsfiddle.net/rniemeyer/LdeWK/3/

個別水果不一定需要是可觀察的,除非你需要你的UI向值反應改變(您的樣本需要反應,因爲您正在顯示水果的只讀列表)。

+0

大,感謝澄清我 – Sam 2012-03-01 04:36:11

+1

術後隨訪 - 什麼是顯示observableArray長度的正確方法是什麼?以你的小提琴爲出發點http://jsfiddle.net/wWDvW/ – BuddyJoe 2012-08-08 02:32:16

+1

你需要像'fruit()。length'這樣的底層數組, – 2012-08-08 12:47:28

0

這裏是我的黑客周圍:

<!-- ko foreach: list().map(observable => ({ value: observable })) --> 
    <input type="text" data-bind="value: value"> 
<!-- /ko --> 
相關問題