我當前的代碼看起來是這樣的:如何正確使用Marionette佈局?
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);
}
});
看來,如果在區域對象指定的元素已經佈局只能在佈局創建時存在。但是文件表明情況並非如此。
我可能做錯了什麼。但是什麼?
問候 羅傑
作爲附錄,如果您使用Marionette 1.8,您現在可以利用[onDomRefresh](https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.view.md#view- domrefresh - ondomrefresh-event),這將確保最初呈現的內容和新呈現的內容完全存在於DOM中。 –