【问题标题】:Knockout mapping couldn't update observableArray淘汰赛映射无法更新 observableArray
【发布时间】:2016-03-13 14:57:30
【问题描述】:

我正在尝试通过映射插件更新可观察数组,但插件不会更新可观察数组。

var list = ko.observableArray([]);
ko.mapping.fromJS([{ id: 1 }], list);
console.log(list()); //It is always empty

【问题讨论】:

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


    【解决方案1】:

    映射插件会遍历输入对象的属性并相应地更新目标视图模型的属性。但是,数组没有属性(至少没有您对映射感兴趣的属性)。

    试试这个:

    var viewmodel = {
        list: ko.observableArray([])
    };
    
    ko.mapping.fromJS({
        list: [{ id: 1 }]
    }, {}, viewmodel);
    
    console.log(viewmodel.list());
    

    请注意,mapping.fromJS() 的第二个参数应该是映射选项。由于我们别无选择,我通过{}。第三个参数是映射目标。


    数组并不意味着传递给映射插件。您可以直接更新它们,将映射插件用于真正像这样微不足道的事情是没有意义的:

    var list = ko.observableArray([]);
    list([{ id: 1 }]);
    

    如果您打算维护一组子视图模型,那么映射选项就派上用场了:

    var viewmodel = {
        list: ko.observableArray([])
    }
    
    ko.mapping.fromJS({
        list: [{ id: 1 }]
    }, {
        list: {
            // make items in the "list" property become ItemModel
            // instances that are recognized by their respective ID
            create: function(options) {
                return new ItemModel(options.data);
            },
            key: function(item) {
                return ko.unrwap(item.id);
            }
        }
    
    }, viewmodel);
    
    console.log(viewmodel.list());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多