答案很大程度上取决于您所说的插件。
例如,大多数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