【问题标题】:Knockout.js observable binding not updating (with JSON mapping)?Knockout.js 可观察绑定未更新(使用 JSON 映射)?
【发布时间】:2012-05-01 07:13:56
【问题描述】:

背景:我有一个使用映射插件的单页 knockout.js 应用程序。数据通过来自服务器的 Websocket JSON 更新。我可以看到应用程序正在成功接收数据(在控制台中打印数据)并且当有 object 删除/添加时,ViewModel 更新没有问题。

问题:从服务器更新对象的属性时,它不会更改 ViewModel。我是否需要在每次更新时以某种方式返回对象属性?

以下是相关的sn-ps代码:

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() }">

感谢您的洞察力!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-30
      • 2015-01-18
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 2013-07-05
      相关资源
      最近更新 更多