我想加載和渲染額外的視圖異步並將它們追加到ItemView。Marionette + RequireJS:在ItemView.render()中做一個require
簡化代碼 - 爲什麼$el
沒有在require()
塊中定義render()
- 我在這裏丟失了什麼?我沒有正確使用RequireJS,還是使用Marionette,或者僅僅是我對javascript的經驗不足?
這樣做的建議方法是什麼?它需要是動態的,因爲額外的部分視圖可能在運行時可用,我還不知道它是否被插件註冊過。
define(['require','marionette', 'App', 'swig', 'backbone.wreqr','text!./settings.html'],
function (require,Marionette, App,Swig, Wreqr, settingsHtml)
{
var sectionViews = ['./settingscontent/GeneralView'];
var SettingsView = Marionette.ItemView.extend(
{
template: Swig.compile(settingsHtml),
commands: new Wreqr.Commands(),
initialize: function()
{
this.commands.addHandler('save', function (options, callback)
{
callback();
});
Marionette.ItemView.prototype.initialize.apply(this, arguments);
},
render: function()
{
Marionette.ItemView.prototype.render.call(this);
var $el = this.$el;
var self = this;
require(sectionViews, function (View)
{
$el.find('div.tab-content').append(new View(self.model).render().$el);
// $el is not defined
// self != outer this - $el is an empty div
});
return this;
}
}
return SettingsView;
})
如果我有足夠的分數,我會倒下來,你的回答沒有解決我的查詢要點()中的要點。結果在onRender中是一樣的(已經測試過) – Tim 2013-03-11 18:43:23
當我看到忽略模式的代碼時,我總是首先解決這個模式,這通常表明程序員正在努力使貓叫聲。在你的情況下,你仍然應該看看你爲什麼這樣做。但是,您的範圍也不正確。 require(sectionViews,function(View)爲你創建一個新的範圍,所以$ el是不可訪問的。 – MarkKGreenway 2013-03-11 19:02:13