我有一个关于 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/