2015-07-24 2 views
0

У меня есть модуль, который называется GridView, в котором я продлить Marionette.ItemView как ниже:марионеток View - не удалось повторно шаблону

GridView.View = Marionette.ItemView.extend({ 
    template: "#grid-view-template", 
    showGrid: function(gridName) { 
    .... 
    }, 
    .... 
} 

Всякий раз, когда сетка будет отображаться вызывающий расширяет GridView и вызывает метод ShowGrid с параметром (как указано ниже)

//Module A code 
var View = GridView.View.extend({ 
}); 
.... 
someregion.view.showGrid("GridA"); 


//Module B code 
var View = GridView.View.extend({ 
}); 
.... 
someOtherregion.view.showGrid("GridB"); 

проблема заключается в том, что, когда я показываю сетку первым, а затем нажмите кнопку (на некотором меню), чтобы показать сетку B, я получаю пустой экран. Если я вернусь к Grid A, он отобразит сетку. Если я сначала покажу Grid B, он отображает Grid, но получает пустой экран при нажатии Grid A. (т. е. отображается только сетка, которая вызывается в первую очередь). Я всегда могу вернуться к сетке, которая показана первая и является показывает :-(

В момент отчаяния я сделал следующее:

а) Удалены шаблон из GridView

б) Добавлено шаблон для каждого модуля

Если я сделаю это, он работает, как ожидалось (фрагмент кода ниже)

GridView.View = Marionette.ItemView.extend({ 
    //template: "#grid-view-template", (COMMENTED OUT) 
    showGrid: function(gridName) { 
    .... 
    }, 
    .... 
} 
//Module A code 
var View = GridView.View.extend({ 
    template: "#gridA-template", 
}); 
.... 
view.showGrid("GridA"); 

//Module B code 
var View = GridView.View.extend({ 
    template: "#gridB-template", 
}); 
.... 
view.showGrid("GridB"); 

Когда каждый View, который расширяет GridView имеет O wn все работает хорошо - было бы признательно, если бы кто-то мог пролить свет на это.

Хотя это работает для меня, его боль, поскольку каждый модуль, который должен показать сетку необходимо определить свой собственный шаблон с другим ID Сам шаблон довольно прост

<div id="grid-view-div3"></div> 

заранее спасибо

Джозеф

+0

Вы не хотите, чтобы 'var view = new GridView.View.extend ({..})'? – akotian

+0

Не могли бы вы опубликовать метод showGrid? – seebiscuit

+0

Я думал, что ваш вопрос был убедителен, поэтому я создал для него [jsFiddle] (https://jsfiddle.net/Seabiscuit/qrfLvLme/1/). Как вы правильно приняли вначале, вам нужен только один шаблон для базового представления, и он будет ** повторно использован ** соответствующим образом. [Взгляните] (https://jsfiddle.net/Seabiscuit/qrfLvLme/1/). – seebiscuit

ответ

0

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

Если у вас есть способ сделать более общий шаблон и иметь все сетки (A, B или C), используйте один и тот же div (из вашего шаблона), тогда ваше первое решение должно работать ... it звучит, когда вы помещаете сетку в правильный div, который ваш шаблон предоставляет для модуля A с помощью showGrid: function (gridName), который использует ту же функцию для модульного B, ища другой div

Что именно показываетGrid: делать?