Backbone.js 如何正确使用木偶布局?
我当前的代码如下所示:Backbone.js 如何正确使用木偶布局?,backbone.js,marionette,Backbone.js,Marionette,我当前的代码如下所示: define([ 'jquery', 'underscore', 'backbone', 'marionette', 'templates', 'gridView', 'detailView', 'detailModel' ], function ($, _, Backbone, Marionette, JST, GridView, DetailView, DetailModel) { 'use s
define([
'jquery',
'underscore',
'backbone',
'marionette',
'templates',
'gridView',
'detailView',
'detailModel'
], function ($, _, Backbone, Marionette, JST, GridView, DetailView, DetailModel) {
'use strict';
return Marionette.Layout.extend({
el: '#main',
template: JST['app/scripts/templates/main.ejs'],
initialize: function() {
this.render();
},
onRender: function () {
var Layout = Marionette.Layout.extend({
el: 'div',
template: _.template(""),
regions: {
grid: '#grid',
detail: '#detail'
}
});
this.layout = new Layout();
this.layout.render();
},
showGrid: function () {
var detailModel = new DetailModel();
var g = new GridView(detailModel);
var d = new DetailView(detailModel);
this.layout.grid.show(g);
this.layout.detail.show(d);
}
});
});
我不明白的是,为什么我需要在onRender方法中添加一个额外的布局来实现这一点。“#grid”和“#detail”div是main.ejs模板的一部分,但以下内容不起作用:
return Marionette.Layout.extend({
el: '#main',
template: JST['app/scripts/templates/main.ejs'],
regions: {
grid: '#grid',
detail: '#detail'
},
initialize: function() {
this.render();
},
onRender: function () {
var detailModel = new DetailModel();
var g = new GridView(detailModel);
var d = new DetailView(detailModel);
this.grid.show(g);
this.detail.show(d);
}
});
似乎只有在创建布局时区域对象中指定的元素已经存在时,布局才起作用。但文件表明情况并非如此
我可能做错了什么。但是什么呢
问候
罗杰在第二个代码示例中,尝试使用
onShow
而不是onRender
此外,在木偶中,您通常不会自己调用render
,因为当您将视图/布局传递给show
方法时,框架将调用该方法
在这里,您可以看到您试图实现的目标的不同看法:
- (特别是第43-46行)
onRender
方法中调用.show()
可能会对嵌套在该布局下的任何内容产生负面影响,特别是当您稍后尝试使用onShow
以确保视图的DOM子树可通过jQuery访问时
.show()
在该布局的任何子视图中触发“show”事件,这可能意味着在这些子视图呈现和插入内容之前,在这些子视图(侦听“show”事件)中调用onShow()
作为补充,如果您使用的是木偶1.8,您现在可以利用它来确保最初呈现的内容和新呈现的内容在DOM中完全呈现。