木偶视图 - 无法重复使用模板

时间:2015-07-24 05:20:43

标签: marionette

我有一个名为GridView的模块,其中我扩展了Marionette.ItemView,如下所示:

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

问题是当我首先显示网格A然后单击(在某些菜单上)以显示网格B时,我得到一个空白屏幕。如果我回到网格A,它会显示网格。如果我首先显示网格B,它会显示网格,但在单击网格A时会出现空白屏幕。 (即仅显示首先调用的网格)。我总是可以回到首先显示的网格并显示: - (

在沮丧的时刻,我做了以下事情:

a)从GridView

中删除了模板

b)将模板添加到每个模块

如果我这样做,它会按预期工作(下面的代码片段)

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

当每个扩展GridView的View都有自己的模板时,一切运行良好 - 如果有人能够对此有所了解,我将不胜感激。

虽然这对我有用,但由于每个需要显示网格的模块需要使用不同的ID定义自己的模板,因此很痛苦 模板本身很简单

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

提前致谢

-Joseph

1 个答案:

答案 0 :(得分:0)

只要您的子视图全部使用相同的模板,就可以在基类中创建模板,然后将视图扩展到它。如果模板需要稍微不同(不确定是否可以更改),那么您可以保留基类,然后在每个子视图中指定要使用的模板,就像您正在做的那样。

如果您有办法制作更通用的模板,并且所有网格(A,B或C)都使用相同的div(来自您的模板),那么您的第一个解决方案应该有效......听起来比如,当您将网格放入模板为模块A提供showgrid:function(gridName)的正确div时,使用模块B的相同功能寻找不同的div

showGrid到底是做什么的?