2016-11-21 2 views
0

Я пытаюсь добавить новую модель в родительский вид из дочернего представления.Добавление модели в родительский вид из дочернего представления

В моей родительской точки зрения, я сделать вид ребенка, как это:

renderEngineOptions: function() { 
     var view = new EngineOptionsView({ model: this.model }); 
     this.$('.engineOptions').append(view.render().el); 
    }, 

На мой взгляд ребенка (engineOptionsView), я определяю как «родитель this.engine» в методе инициализации:

initialize: function (args) { 
     this.engine = args.model; 
    } 

Тогда у меня есть кнопка HTML, что при нажатии запускает это событие:

addTurbo: function() { 
     this.$('.turboOption').show(); 
     this.engine.turbo = new Turbo(); 
    } 

Turbo является новой моделью что я пытаюсь добавить в движок. Но ничего не происходит. Я не ошибаюсь в консоли, но когда я выписываю модель двигателя в консоли, турбо никогда не добавлялся.

Как добавить модель турбонаддува к родительскому, от ребенка?

Спасибо!

+0

Пожалуйста, укажите [mcve], который демонстрирует проблему, которую вы пытаетесь решить. –

ответ

1

Если вы передадите модель с опцией model, вид автоматически применит ее к себе, поэтому она доступна через this.model.

var view = new EngineOptionsView({ model: this.model }); 

у ребенка:

initialize: function (args) { 
    this.engine = args.model; // not necessary 
    console.log(this.model === this.engine); // same thing 
} 

Вы добавляете turbo как свойство модели

this.engine.turbo = new Turbo(); 

Так что если вы хотите получить turbo от родителя:

this.model.turbo; 

Если вы хотите добавить turbo как атрибут модели с точки зрения ребенка:

this.model.set('turbo', new Turbo()); 

И чтобы получить его от родителей:

this.model.get('turbo); 

Без получения более подробной информации, это трудно догадаться, где проблема исходит.

+0

Почему у тестера основной цепи есть несколько вопросов, кроме угловых js. это означает, что основой является не хорошая структура? – Mahi

+1

@Mahi Backbone не является каркасом, и он был популярен, когда в то время не было ничего лучшего (~ 2011-2012). AngularJS - это новая * рамка *, которая по-прежнему поддерживается. –

+0

Если вы используете коллекцию для рендеринга родительского представления, вы можете просто нажать новую модель на коллекцию, как this.model.collection.add ({}) –

Смежные вопросы