背景:マッピング プラグインを使用して、単一ページの 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() }">
洞察をありがとう!