Knockout.js可观察绑定不更新(使用JSON映射)?

时间:2012-04-19 17:43:18

标签: javascript json knockout.js knockout-mapping-plugin

背景:我使用映射插件获得了单页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() }">

感谢您的见解!

1 个答案:

答案 0 :(得分:2)

我已经能够解决这个问题,但我对这个决定的长期影响持怀疑态度。

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

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