【问题标题】:ko.mapping create function, extend objectko.mapping 创建函数,扩展对象
【发布时间】:2012-04-04 12:24:10
【问题描述】:

是否可以在映射过程中修改对象的(因为没有更好的术语)架构?我想它是,我似乎无法让它工作。我正在尝试这样的事情:

var data = {
    itemOne: 'someData',
    itemTwo: 'moreData'
}

var mapping = {
    "newItem": {
          create: function(options) {
            return ko.observable(false);
          }
    }
};

ko.mapping.fromJS(data, mapping, _model.observableArrayPart);

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin


    【解决方案1】:

    这是一个示例,展示了如何自定义数组创建和定义键的方式,以便您可以使用映射插件应用更新:http://jsfiddle.net/rniemeyer/LHeQZ/

    var data = [
        { id: 1, first: "Bob", last: "Smith" },
        { id: 2, first: "Jim", last: "Jones" },
        { id: 3, first: "Delete", last: "Me" }
    ];
    
    var updatedData = [
        { id: 1, first: "Robert", last: "Smith" },
        { id: 2, first: "James", last: "Jones" },
        { id: 4, first: "New", last: "Guy" }
    ];
    
    var Person = function(data) {
        this.id = data.id;
        this.first = ko.observable(data.first);
        this.last = ko.observable(data.last);
        this.full = ko.computed(function() {
            return this.first() + " " + this.last();
        }, this);        
    };
    
    
    var dataMappingOptions = {
        key: function(data) {
            return data.id;        
        },
        create: function(options) {
            return new Person(options.data);
        }        
    };
    
    
    var viewModel = {
        people: ko.mapping.fromJS([]),
        loadInitialData: function() {
            ko.mapping.fromJS(data, dataMappingOptions, viewModel.people);        
        },
        loadUpdatedData: function() {
            ko.mapping.fromJS(updatedData, dataMappingOptions, viewModel.people);  
        }        
    };
    
    ko.applyBindings(viewModel);
    

    【讨论】:

    • 那么,在这个例子中你是说关键是所有的数据?我认为你必须传递一些“项目”才能做到这一点。这真是令人印象深刻的东西,我没有想象这样布置它。他们需要在网站上提供这样的示例,或者您应该将一个示例添加到 KnockMeOut :)。
    • 也许key变成了data.id?在调试我的解决方案时,情况可能就是这样。
    • 映射插件允许您传入映射选项。 keycreate 函数是其中的一部分。通常,您会为数据中的某些属性指定keycreate 函数,例如items,但在这种情况下,我们只是在根级别配置它们,因为我们直接处理数据数组。
    • 好的,我就是这么理解的。真的很有帮助!再次感谢!就在这周,你已经让我摆脱了 10 次绑定 :)。
    • 那么,在这种情况下,使用映射插件有什么意义呢?反正你都是手动做的,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2021-12-04
    相关资源
    最近更新 更多