背景:我有一个使用映射插件的单页 knockout.js 应用程序。数据通过来自服务器的 Websocket JSON 更新。我可以看到应用程序正在成功接收数据(在控制台中打印数据)并且当有对象删除/添加时,ViewModel 更新没有问题。
问题:从服务器更新对象的属性时,它不会更改ViewModel。我是否需要在每次更新时以某种方式返回对象属性?
以下是相关的代码片段:
var userMapping = {
"users": {
key: function(data) { return ko.utils.unwrapObservable(data.id); },
create: function(options) {
// for sortable ui access
return createUser(options.data);
}
}
};
var jobMapping = {
"jobs": {
key: function(data) { return ko.utils.unwrapObservable(data.id); },
create: function(options) {
// for sortable ui access
return createJob(options.data);
},
update: function(options) {
return createJob(options.data);
}
}
};
var createJob = function(job, user) {
// leaflet init
createJobIcon(job);
// general data mapping
var result = ko.mapping.fromJS(job);
return result;
};
self.engineModel.update = function(data) {
ko.mapping.fromJS(data, userMapping, self.engineModel);
};
在 ViewModel 中:
<li data-bind="visible: canceled()==false, attr: {class: 'job-li canceled-'+canceled()+' started-'+started()+' hold-'+hold() }">
感谢您的洞察力!