javascript - 使用 ko.mapping.fromJS 时未触发 knockout 订阅回调

标签 javascript knockout.js

我有一个关于 knockout 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));

最佳答案

Bindrid 是正确的。 notes 是一个数组,并且该数组没有更改,因此没有理由触发您的订阅。如果将新值推送到 notes 数组,则会触发事件。您必须单独订阅每个值或进行计算以读取每个元素的值,然后订阅该计算。

关于javascript - 使用 ko.mapping.fromJS 时未触发 knockout 订阅回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41562092/

相关文章:

javascript - Dreamweaver 将 jquery 突出显示为正则表达式

javascript - 在 CakePHP 中创建预览页面

javascript - 圆形背景无法放在图标周围

javascript - knockout 日期验证无法正常工作

javascript - 无法关闭的单个网页。仅全屏并播放视频

javascript - Windows 8 JS 应用程序中的 jQuery

javascript - 验证属性内的 javascript

javascript - observableArray 未定义

javascript - 带有 knockout js的动态单选按钮行为

javascript - Knockout.Mapping 为简单的 JSON 数组创建映射 Hook