2015-06-17 1 views
0

У меня есть приложение для марионетки/магии, которое отлично работает. Я хотел бы добавить дополнительный слой в наших представлениях:Вложенная марионетка LayoutView - синтаксическая модель

До:

TabLayoutView -> CompositeView 

После:

TabLayoutView -> SectionLayoutView -> CompositeView 

Но это не работает, и я не могу видеть, где проблема.

Вот код:

Модель вкладки:

TabModel = Backbone.Model.extend({ 
    defaults: { 
    headerModel: {label: '', left: '', right: ''} 
    } 
}) 

Шаблон закладки:

<div class="headerSection"></div> 

Вид вкладки:

var TabLayoutView = Marionette.LayoutView.extend({ 
    template: _.template(TabTemplate), 
    tagName: 'div', 
    regions: { 
    headerRegion: {selector: '.headerSection'} 
    }, 
    onShow: function() { 
    this.headerRegion.show(new SectionLayoutView({model: this.model.get('headerModel')})); 
    } 
}); 

модели раздела:

SectionModel = Backbone.Model.extend({ 
    defaults: { 
    label: '', 
    left: '', 
    right: '' 
    } 
}); 

Шаблон раздела:

<div class="section"> 
    <div class="leftSection"/> 
    <div class="rightSection"/> 
</div> 

Вид раздела:

Ошибка я получаю:

Uncaught TypeError: Cannot read property 'apply' of undefined

в методе

serializeModel: function(model) { 
    return model.toJSON.apply(model, _.rest(arguments)); 
} 

, срабатывающий в этой строке:

this.headerRegion.show(new SectionLayoutView({model: this.model.get('headerModel')}));

Не могли бы вы дать мне какие-либо идеи о том, что это не так? У нас есть аналогичный код в других местах, и он работает нормально. Похоже, что проблема с моделью синтаксиса json, но я не понимаю, почему.

ответ

2

Поскольку вы пропускание простого объекта для зрения ...

this.headerRegion.show(new SectionLayoutView({ 
    model: this.model.get('headerModel') // NOT a Backbone.Model 
}); 

Попробуйте это:

this.headerRegion.show(new SectionLayoutView({ 
    model: new Backbone.Model(this.model.get('headerModel')) 
});