【问题标题】:Initialize backbone model using its child model使用其子模型初始化主干模型
【发布时间】:2016-04-29 09:05:15
【问题描述】:

我有以下骨干模型

var Parent = Backbone.Model.extend({
    defaults: {
        id: '',
        name: ''
    }
});

var Child = Parent.extend({
    defaults: {
        color: '',
        shape: '',
        isValid: false
});

现在我有以下“儿童”模型的对象

var child = new Child({
    id: '101',
    name: 'Abc',
    color: 'White',
    shape: 'Square',
    isValid: true
});

我需要使用这个“子”模型对象创建一个“父”模型对象,为此我做了以下操作:

var json = convertToJSON(child);
var parent = new Parent(json);

但是这里“子”模型的属性也被填充到“父”模型的父对象中。有没有办法在这个新对象中只填充适用于“父”模型的那些属性?我不想使用“删除”来删除不适用的属性。

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:
    1. 您可以使用_.pick,作为child.pick 代理到您的子对象上来选择特定属性,
    2. 您可以提取Parent.defaults的密钥以确定您需要什么

    这翻译成:

    var parent = new Parent(
        child.pick(_.keys(Parent.prototype.defaults))
    );
    

    还有一个演示https://jsfiddle.net/nikoshr/u5rfpa6v/

    【讨论】:

      【解决方案2】:

      您可以在子模型上使用pick 方法来仅获取必需的属性

      var json = child.pick('color', 'shape');
      var parent = new Parent(json);
      

      它将返回一个您可以传递给父模型的对象。 你可以阅读更多关于它here

      您也可以使用es2015 destructive assignment,但您需要Babel 转译器。

      const {color, shape} = child;
      const parent = new Parent({color, shape});
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-26
        • 2012-01-25
        相关资源
        最近更新 更多