使用其子模型初始化主干模型

时间:2016-04-29 09:05:16

标签: javascript backbone.js

我有以下骨干模型

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

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

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

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

我需要使用这个“Child”模型对象创建一个“Parent”模型对象,我执行了以下操作:

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

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

2 个答案:

答案 0 :(得分:1)

您可以在子模型上使用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});

答案 1 :(得分:1)

  1. 您可以使用_.pick代理您的子对象child.pick来选择特定属性,
  2. 您可以提取Parent.defaults的键以确定您需要的内容
  3. 这转化为:

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

    演示https://jsfiddle.net/nikoshr/u5rfpa6v/