答案很大程度上取決於您所說的插件。
例如,大多數jQueryUI控件和KendoUI控件都允許您在將HTML附加到DOM之前直接從視圖的render
調用插件方法。您只需在視圖的el
上調用它即可。
例如,如果我想使用上生成視圖KendoUI的菜單:
Backbone.View.extend({
tagName: "ul",
render: function(){
var html = "<li>foo</li><li>bar</li>";
this.$el.html(html);
this.$el.kendoMenu();
}
});
有需要的HTML是DOM的一部分已經因爲種種原因,一些插件。在這種情況下,我通常在我的視圖中提供onShow
函數,並讓代碼顯示視圖檢查並在存在時調用它。
例如,我使用了幾次「佈局」插件。這個插件需要HTML是DOM的一部分,纔可以上班:
MyView = Backbone.View.extend({
render: function(){
var html = "generate some html here...";
this.$el.html(html);
},
onShow: function(){
this.$el.layout();
}
});
// .... some other place where the view is used
var view = new MyView();
view.render();
$("#someElement").html(view.el);
if (view.onShow) {
view.onShow();
}
FWIW:我已經寫了昂秀等常用方法和事件數十次的代碼,並鞏固了它全部變成骨幹插件稱爲Backbone.Marionette,這樣我就不必再寫了。
http://github.com/derickbailey/backbone.marionette
沒有什麼比這只是多提供了很多在這個附加的,當然。
這讓我想起了我的舊數學測試。我過去只是抹掉我的回答,然後走出去,因爲我最終只能得到9.2345124的結果,而且看起來太奇怪了,所以我就這樣走了出來。這裏是一樣的,我期望一個乾淨的解決方案,但顯然沒有。 = /圖書館看起來很不錯,但! – CamelCamelCamel 2012-02-19 16:04:33
舊的'setTimeout(function(){...},0)'hack是一種替代方案,當您需要某些東西來等待DOM排序時通常可以使用。 – 2012-02-19 17:10:09