此问题基于我之前的Switching from a region to another in Marionette, views are not rendered correctly。它与它不同,因为我问的是我所遵循的方法是否正确,或者是否存在执行区域之间切换的另一种方法。
我创建了一个包含两个不同区域的布局。在initialize
上,布局会在布局的两个区域中加载两个视图。说ViewA
和ViewB
。在ViewA
内,会触发一个事件。布局要切换事件并注入其他两个视图。说ViewC
和ViewD
。
这种方法是正确的还是我必须遵循另一种模式?路由?
这里有一些代码,其中注释突出了重要部分。
onConfirm : function() {
this.leftView = new ViewC();
this.rightView = new ViewD();
this.leftRegion.show(this.leftView);
this.rightRegion.show(this.rightView);
},
initialize : function() {
// listen for event triggered from ViewA
// e.g. GloabalAggregator.vent.trigger("ga:confirm");
// where "ga:confirm" is a simple string
GloabalAggregator.vent.on("ga:confirm" , this.onConfirm, this);
this.leftView = new ViewA(), // creating here a new ViewC the style is applied correctly
this.rightView = new ViewB(); // creating here a new ViewD the style is applied correctly
},
onRender : function () {
this.leftRegion.show(this.leftView);
this.rightRegion.show(this.rightView);
}
答案 0 :(得分:1)
要在Layout
中切换视图,通常使用Controller,请查看this gist示例。
基本上你必须创建一个新的控制器
var controller = Marionette.Controller.extend({
initialize: function(options){
this.leftRegion = options.leftRegion;
this.rightRegion = options.rightRegion;
},
swap: function() {
// do the region swapping here
}
});
你可以从视图中这样创建它:
var controller = new MyController({
leftRegion: this.leftRegion,
rightRegion: this.rightRegion
});
(其中this
引用该视图)并在listenTo的帮助下听取该事件。
Marionette的作者可能会发现一些有用的例子: