Только что заметил какое-то неожиданное поведение в knockout.js. Получил некоторый код, который обходит вокруг наблюдаемого массива и повторяет некоторые связанные элементы HTML для каждого элемента массива. Один из предметов - это свойство на под-объекте:Нокаут останавливает обновление наблюдаемого после распаковки свойства
<tbody data-bind="foreach: Contact">
<tr>
<td data-bind="text: Name"></td>
<td data-bind="text: Project().Name"></td>
<td data-bind="text: Percentage"></td>
</tr>
</tbody>
Это изделие отличное на странице загрузки. Но если пользователь выполняет действия, которые в конечном итоге изменяют массив Contact или элементы внутри него, Name и Project(). Обновление имени, но Percentage не работает, хотя при переходе через показывает, что оно имеет правильное значение.
Однако, если удалить распакованный подобъект:
<tbody data-bind="foreach: Contact">
<tr>
<td data-bind="text: Name"></td>
<td></td>
<td data-bind="text: Percentage"></td>
</tr>
</tbody>
Все работает отлично.
Что здесь происходит, и есть ли исправление лучше, чем использование вычисленного наблюдаемого или somesuch для вычисления и хранения моего Project(). Значение имени?
из любопытства, это изменение порядка влияет на проблему? т. е. если Project(). name отображается последним, разрешает ли Percentage рендеринг? –
Можете ли вы воспроизвести его в jsfiddle? Также '
- Joseph - да, он отлично работает, если Project(). last ... sroes. Я попытаюсь собрать что-то вместе, но у нас есть сложное приложение, и я не всегда могу воспроизвести проблемы в простом приближении jsfiddle. –