1

背景:我有一个使用映射插件的单页 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() }">

感谢您的洞察力!

4

1 回答 1

2

我已经能够纠正这种行为,但我仍然对该决定的长期影响持怀疑态度。

我删除了这一行: key: function(data) { return ko.utils.unwrapObservable(data.id); },

现在一切都更新了。如果有人对进一步处理有想法,我会全力以赴(例如,这会影响性能吗?)

于 2012-04-19T18:42:27.630 回答