背景:我使用映射插件获得了单页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() }">
感谢您的见解!
答案 0 :(得分:2)
我已经能够解决这个问题,但我对这个决定的长期影响持怀疑态度。
我删除了这一行:
key: function(data) { return ko.utils.unwrapObservable(data.id); },
现在一切都按照应有的方式更新。如果有人有进一步处理的想法,我会全力以赴(例如,这会影响性能吗?)