2013-05-22 5 views
0

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

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 будет слушать изменения, такие как добавление и удаление элемента (методы, вызываемые самим наблюдаемым массивом), но они действительно не знают, когда изменяется один из их элементов. То, что делает сам элемент, является наблюдаемым.

+0

Спасибо за ответ, однако он не объясняет, почему, когда я обновляю экран (т. Е. Перейдя непосредственно к представлению деталей, а не через представление списка), он правильно отображает значения на экране. –