2016-04-29 3 views
1

я следующий системообразующих моделейИнициализировать магистральную модель с использованием своего ребенка модель

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); 

Но вот атрибуты «Ребенок», модель также заполняются в родительский объект модели «Родитель». Есть ли способ заполнить только те атрибуты, которые применимы к модели «Родитель» в этом новом объекте? Я не хочу использовать «delete» для удаления неприменимых атрибутов.

ответ

1
  1. Вы можете использовать _.pick, прокси-соединение на свой дочерний объект как child.pick выбрать определенные атрибуты,
  2. Вы можете извлечь ключи Parent.defaults, чтобы определить, что вам нужно

Это приводит к :

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

И демо-версия https://jsfiddle.net/nikoshr/u5rfpa6v/

+0

Спасибо, что помогло .. – sagargurtu

1

Вы можете использовать метод pick на модель ребенка, чтобы получить только необходимые атрибуты

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

Он возвращает объект, который можно передать в родительской модель. Вы можете прочитать больше об этом here

В качестве альтернативы вы можете использовать es2015 destructive assignment но вам нужно будет Babel transpiler для него.

const {color, shape} = child; 
const parent = new Parent({color, shape}); 
Смежные вопросы