Моя модель представления состоит из наблюдаемого массива с наблюдаемыми элементами.
// viewmodel
var viewModel = function () {
this.o = ko.observableArray();
for (var i = 0; i < 3; i++)
this.o.push(ko.observable(0));
};
Мне нужно изменить значения этих элементов. И для этого я создаю свой компонент. Простой пример ниже:
//custom element <component>
ko.components.register("component", {
viewModel: function (params) {
var self = this;
this.value = params.value;
console.log("init component");
this.i = 1;
this.change = function () {
self.value(self.i++);
console.log("change to " + self.value());
}
},
template: "<span data-bind='text: value'></span> <button data-bind='click:change'>Change</button>"
});
Этот компонент может изменить значение наблюдаемого элемента, которое входит в params.value.
Моя точка зрения очень проста:
<!--ko foreach:o-->
<component params="value: $rawData"></component>
<!--/ko-->
Полный пример: http://jsfiddle.net/tselofan/xg16u5cg/7/ Проблема в том, когда значение наблюдаемого элемента в наблюдаемом массиве изменяется, компонент рендерится заново, так как он находится внутри привязки foreach. Это можно увидеть в логах. Какую лучшую практику я могу использовать в этой ситуации? Спасибо