2014-10-17 2 views
2

Я создал представление, как это:Сбой продлить вид макета в Backbone марионеток

var MyView = Marionette.LayoutView.extend({ 
    template: #someTemplate, 
    regions: function() { 
     return { 
      someRegions: '.Regions', 
     }; 
    }, 

    initialize: function(options) { 
     if (options) { 
      do stuff... 
     } 
    }, 

    onRender: function() { 
     var titleBar = new Bar({ options: "options" }); 
     this.barRegion.show(titleBar); 
    } 
}); 

который в основном вид, что имеет верхнюю панель с некоторыми кнопками.

Теперь мне нужно создать целую кучу различных взглядов, которые имеют ту же самую верхнюю планку, так что я хочу, чтобы иметь возможность сделать что-то вроде этого:

var SecondView = MyView.extend({ 

    template: #template, 

    onRender: function() { 
     create content below top bar here... 
    } 
}); 

При добавлении точки останова, я вижу, что MyView-х initialize & функции рендеринга НЕ вызывается, но вызываются только мои функции инициализации и рендеринга SecondView.

Таким образом, верхняя панель не отображается, на самом деле шаблон MyView не отображается. Появляется только SecondView.

Что мне здесь не хватает?

Заранее спасибо ...

+0

Вы не указали все соответствующие коды? Я не вижу никакого метода инициализации или рендеринга, определенного для SecondView, поэтому, когда вы говорите, что вызываются только мои функции инициализации и рендеринга SecondView, что вы имеете в виду? – kinakuta

ответ

0

Спасибо всем, кто пытался помочь мне с этим ...

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

От Initialize SecondView в метод, который я должен был вызвать метод инициализации MyView в:

initialize: function(options) { 

     MyView.prototype.initialize.call(this, options); 

    } 

Тогда из метода OnRender SecondView, я должен был вызвать метод OnRender MyView в:

onRender: function() { 

     MyView.prototype.onRender(this); 

     // extra content for my SecondView goes here... 

     var secondViewContent = new Content(); 
     this.someRegionInMyView.show(secondViewContent); 
    } 
0

Проблема в том, что ваш метод onRender на втором зрения перекрывая первый, так что только ваш SecondView.onRender код выполняется.

Думаю, вы здесь ошибаетесь. Создайте макет, включающий общую верхнюю панель, и добавьте еще один регион для просмотров, которые ниже этого. Если в этом представлении находится другой макет, все в порядке.

Графически:

MainLayout --Topbar Регион --SecondBar Регион

Вы можете сделать MainLayout быть регионы приложений, а также использовать маршрутизатор или любой другой механизм, чтобы загрузить нужный вид в SecondBar область.

Надеюсь, что это имеет смысл. ;)

Если вы настаиваете на использовании наследования, а затем вызвать второй метод из вашего MainView OnRender, что-то вроде:

onRender: function() { 
    var titleBar = new Bar({ options: "options" }); 
    this.barRegion.show(titleBar); 
    //hook for child views 
    this.triggerMethod("onSecondRender"); 
} 

А затем переместите onRender код onSecondRender на ваших взглядов ребенка.

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