Knockout.js, использующий связывание `value:` в `foreach` над списком строк - не обновляется
ВотJSFiddle демонстрируя следующую проблему:
Учитывая привязку foreach к списку (наблюдаемых) строк, наблюдаемые, по-видимому, не обновляются от изменений входных тегов, связанных внутри foreach. Можно было бы ожидать их. Вот пример из jsFiddle:
HTML<ul dat,a-bind='foreach: list'>
<li><input data-bind='value: $data'/></li>
</ul>
<ul data-bind='foreach: list'>
<li><span data-bind='text: $data'></span></li>
</ul>
Javascriptvar vm = { list: [ko.observable('123'), ko.observable('456')] };
ko.applyBindings(vm);
В приведенном выше примере можно ожидать, что обновление входных тегов в первом списке приведет к обновлению наблюдаемых. К сожалению, они обновляются не так, как ожидалось, что видно по тому, что второй список не отражает все изменения, внесенные в первый список.
Я убедился, что список не обновлялся при изменении элементов ввода. Интересно, что изменения, внесенные в наблюдаемые, отражены в обоих списках (как и следовало ожидать). А именно,vm.list[1]("444")
обновит второй элемент обоих списков.
Насколько я помню, в Knockout 2.0.0 такой проблемы не было, хотя я исправляюсь. Я не нашел никакой документации, Google или комментариев в коде Knockout, которые бы давали какие-либо указания относительно того, почему это не работает или как достичь ожидаемого результата.
Почему это не работает должным образом, и есть ли обходные пути, которые не требуют изменения структуры данных?