Javascript 主干::在视图上使用jQuery插件
我很难想出一个干净的方法来做这件事。让我们以主干网附带的示例todo应用程序的代码片段为例:Javascript 主干::在视图上使用jQuery插件,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我很难想出一个干净的方法来做这件事。让我们以主干网附带的示例todo应用程序的代码片段为例: addOne: function(todo) { var view = new TodoView({model: todo}); $("#todo-list").append(view.render().el); }, 所以ToDo视图被呈现,然后被附加到#ToDo列表中。但是假设我们想在ToDo视图中添加一个jQuery插件。我们应该把$(“.todo”).plugin()放在哪里?如果我们
addOne: function(todo) {
var view = new TodoView({model: todo});
$("#todo-list").append(view.render().el);
},
所以ToDo视图被呈现,然后被附加到#ToDo列表中。但是假设我们想在ToDo视图中添加一个jQuery插件。我们应该把$(“.todo”).plugin()放在哪里?如果我们将它放在ToDo view render函数中,页面上不会设置HTML元素,因此插件不会“锁定”任何DOM元素。如果我们把它放在addOne
函数中,它看起来会很难看
那么,最好的方法是什么呢?答案很大程度上取决于您所谈论的插件
例如,大多数jQueryUI控件和KendoUI控件允许您在将HTML附加到DOM之前,直接从视图的render
调用plugin方法。您只需在视图的el
上调用它
例如,如果我想在生成以下内容的视图上使用KendoUI的菜单:
Backbone.View.extend({
tagName: "ul",
render: function(){
var html = "<li>foo</li><li>bar</li>";
this.$el.html(html);
this.$el.kendoMenu();
}
});
FWIW:我已经为onShow和其他常用方法和事件编写了几十次代码,并将其整合到一个称为主干网.木偶网的主干网附加组件中,这样我就不必再编写它了
当然,在这个附加组件中,有很多不仅仅是这样的功能。您可以使用主干$
方法,就像这样这样。$('todo')
使用上下文范围的jquery查询,这将允许您在当前视图中搜索尚未添加到文档DOM树中的DOM片段
根据我在render方法或某种帮助函数中添加jquery插件绑定的经验,如果有更多自定义绑定,则在创建模板后将从render方法调用这些绑定。这让我想起了以前的数学测试。我过去常常抹掉我的答案然后退出,因为我最终只能得到9.2345124,而这似乎是一个奇怪的数字,不可能是真的,所以我退出了。这里也是一样,我希望有一个干净的解决方案,但显然没有不过图书馆看起来很不错!旧的setTimeout(function(){…},0)
hack是一种替代方法,通常在需要等待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();
}