Hot Towel - Knockout привязка не обновляется observablearray

Я создаю проект SPA, используя шаблон Hot Towel. У меня есть представление списка, в котором показан список элементов, и при щелчке по элементу он перейдет в подробный вид.

router.mapRoute('details/:module/:id', 'viewmodels/details', 'Details', false);

URL подробного экрана становится:

https://xxx/test/#/details/news/4

Мой подробный экран содержит наблюдаемый массив, который заполняется с помощью AJAX в методе активации details.js.

<button class="btn btn-info"
    data-bind="click: save">
    <i class="icon-save"></i>Save</button>

<form id="myform" data-bind="submit: submitForm">
    <table>
        <tbody data-bind="foreach: screenDataArray">
            <tr>
                <td data-bind="text: FieldLabel"></td>
                <td>
                    <input data-bind="value: FieldValue" />
                </td>
            </tr>
        </tbody>
    </table>
</form>

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

Я изменяю FieldValue, и когда я нажимаю на кнопку Сохранить:

var save = function () {
  ko.utils.arrayForEach(screenDataArray(), function (sd) { alert(sd.FieldName + ":" + sd.FieldValue); });

Моя проблема в том, что FieldValue по-прежнему содержит исходные значения (не обновляются).

Теперь я нажимаю на кнопку обновления браузера.

Я изменяю значение и нажимаю сохранить.

Теперь функция сохранения предупреждает правильные измененные значения.

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

Заранее благодарны за Вашу помощь.

1 ответ

Из фрагмента кода вы разместили:

var save = function () {
  ko.utils.arrayForEach(screenDataArray(), function (sd) { alert(sd.FieldName + ":" + sd.FieldValue); });

Похоже, что FieldValue сама по себе не является наблюдаемой (что необходимо для того, чтобы ваш код работал). observableArrays будет прослушивать изменения, такие как добавление и удаление элемента (методы, вызываемые в самом observableArray), но они на самом деле не знают, когда изменяется один из их элементов. Это зависит от самого элемента, будучи наблюдаемым.

Другие вопросы по тегам