2017-02-10 12 views
0

Это может быть очень простой проблемой для тех, кто знаком с knockout.js, однако это вызывает у меня проблему.связывание обновлений в knockout.js

У меня есть ситуация, когда у меня есть модель, содержащая массив элементов, динамически добавленных и отображаемых в представлении.

До сих пор нет проблем, я могу добавить записи в модель, и представление будет обновлено соответствующим образом.

Однако. каждый элемент в массиве имеет массив как свойство, это массив объекта, и когда я обновляю свойства на этих объектах, представление не обновляется.

трудно продемонстрировать это короткий фрагмент кода, так что я создал JsFiddle, чтобы показать проблему:

https://jsfiddle.net/mikewardle/t0nvwqvL/1/

У меня есть попытки делают свойство, порожденным вызова

ko.observable() 

, а не инициализировать их напрямую, но безрезультатно.

нажатие кнопки добавления добавляет элементы в массив на самой модели.

любая из кнопок изменения ... изменяет свойства объектов во внутреннем массиве.

+1

Я могу видеть, что ваш атрибут цвета не наблюдается нокаутом, может быть, вы должны объявить его как наблюдаемый ... – Ko2r

ответ

2

Поскольку Ko2r заявляет, что ваши свойства не объявлены как наблюдаемые, поэтому обновления не будут замечены нокаутом.

Чтобы исправить changecolors() функции вам просто нужно изменить функцию linePusher, чтобы создать цвет, наблюдаемый:

var linePusher = function (color, name) { 
    self.lines.push({ color: ko.observable(color), name: name, current:0 }); 
}; 

, а затем обновить обычаи свойства цвета в поле/распаковывать наблюдаемые вместо того, чтобы заменить его значение с помощью стандартного оператора присвоения «=»

for (i=0;i<counters.length;i++){   
    var lines = counters[i].lines(); 
    for (j=0;j<lines.length;j++){ 
    //lines[j].color = color; 
    lines[j].color(color); //sets the existing observable to the new value 
    } 
} 

к сожалению, я не могу показаться, чтобы смысл вашего кода достаточно, чтобы понять, что функция increment() должна делать, так что я не могу вам сказать, хо w, чтобы исправить это, но, надеюсь, исправления до changecolors() поставят вас на правильный путь.

Вы можете прочитать на working with observables

+0

спасибо, что закрепил все это для меня. Я попытался использовать 'ko.observable()' butr не понял, что вам нужно передать значение для инициализации переменной 'ko.observable (value)' – MikeW