使用ko.mapping.fromJS时,不会触发kn​​ockout subscribe回调

时间:2017-01-10 06:00:37

标签: javascript knockout.js

我有关于淘汰赛ko.mapping.fromJS的问题。我知道ko.mapping.fromJS只是让所有属性都可以观察到。但是,当我更改输入字段的值时。即使值如所示更改,但订阅回调从未触发。有人可以帮帮我吗? JSFiddle中的代码段。

HTML:

<tbody>
  <!-- ko foreach: notes -->
  <tr>
    <td class="col-xs-12">
      <p data-bind="text: value"></p>
      <input type="text" class="form-control" data-bind="value: value" />
    </td>
  </tr>
  <!-- /ko -->
</tbody>
<p data-bind="text: show"></p>

JS:

var notes = [
   {
     "key": "Field1",
     "value": "Progress"
   },
   {
     "key": "Field2",
     "value": "Plan"
   }
];

function NotesModel() {
  var self = this;
  self.notes = ko.mapping.fromJS(notes, {}, self.notes);
  self.show = ko.observable('');
};

var notesModel = new NotesModel();
ko.applyBindings(notesModel);

notesModel.notes.subscribe(function(newValue) {
   notesModel.show(JSON.stringify(newValue));
}.bind(notesModel));

1 个答案:

答案 0 :(得分:1)

Bindrid是对的。 notes是一个数组,数组没有更改,所以没有理由你的订阅会被触发。如果将新值推送到notes数组,则会触发事件。您必须单独订阅每个值,或者生成一个读取每个元素的值的计算,然后订阅计算的值。