2012-03-01 6 views
9

Пожалуйста, взгляните на этот пример. http://jsfiddle.net/LdeWK/2/Нокаут JS - Как правильно привязать наблюдаемый массив

Я хочу знать, как связывать значения наблюдаемого массива. Я знаю, что проблема в приведенном выше примере, то эта линия

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

$ данных являются фактическим значением, не наблюдаемая функции, которые обычно связываются. Кажется, что это должен быть довольно прямой процесс, однако я не могу понять это.

В других случаях я использовал наблюдаемые массивы и имел наблюдаемый объект в качестве каждого элемента наблюдаемого массива. Я хотел знать, как заставить это работать с только наблюдаемым массивом.

Благодаря

ответ

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/

Отдельные плоды не обязательно должны быть видны, если не нужен ваш пользовательский интерфейс, чтобы реагировать на значения (ваш образец должен реагировать, поскольку вы показываете список фруктов только для чтения).

+0

Великий, спасибо за разъяснение, что для меня – Sam

+1

Следить за - Что такое правильный способ отображения длину observableArray? взяв вашу скрипку в качестве отправной точки http://jsfiddle.net/wWDvW/ – BuddyJoe

+1

Вам нужно попасть в базовый массив, например 'fruit(). length' –

0

вот мой хак вокруг:

<!-- ko foreach: list().map(observable => ({ value: observable })) --> 
    <input type="text" data-bind="value: value"> 
<!-- /ko --> 
Смежные вопросы