我正在使用Marionette
,我遇到以下问题。
我创建了一个包含两个不同区域的布局。在initialize
上,布局会在布局的两个区域中加载两个视图。说ViewA
和ViewB
。在ViewA
内,会触发一个事件。布局要切换事件并注入其他两个视图。说ViewC
和ViewD
。
无论何时执行切换,ViewC
和ViewD
都不具有我应用于它们的相同样式(也就是css)。特别是,不应用jQuery Mobile样式。有什么建议吗?
这里有一些代码,其中注释突出了重要部分。
onConfirm : function() {
this.leftView = new ViewC();
this.rightView = new ViewD();
this.leftRegion.show(this.leftView);
this.rightRegion.show(this.rightView);
// FIX calling trigger('create') seems fix the problem. Why? Is this correct?
this.$el.trigger('create');
},
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);
}
修改
调用trigger('create')
似乎可以解决问题。为什么?这是对的吗?
答案 0 :(得分:1)
当你向页面添加新的html(添加新的渲染视图,交换其他视图的视图等等)时,你必须让jQuery mobile了解这一点。
“create”事件用于使用jQuery Mobile小部件增强“原始”html。更多信息可以在这里找到:http://jquerymobile.com/demos/1.0/docs/pages/page-scripting.html 寻找“增强新标记”部分。