Backbone::在视图上使用jQuery插件
Backbone :: Using jQuery Plugins on Views
我很难找到一种干净的方法。让我们举一个例子,从示例todo应用程序中提取一段代码,该应用程序附带主干:
addOne: function(todo) {
var view = new TodoView({model: todo});
$("#todo-list").append(view.render().el);
},
所以ToDo视图正在被渲染,然后它被附加到#todo-list
。但假设我们想在ToDo视图中添加一个jQuery插件。我们应该将$(".todo").plugin()
片段放在哪里?如果我们将其放置在ToDo视图呈现函数中,则页面上不会设置HTML元素,因此插件不会"锁定"到任何DOM元素。如果我们把它放在addOne
函数中,它看起来会很难看。
那么,最好的方法是什么?
答案在很大程度上取决于您所说的插件。
例如,大多数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
函数,并让显示视图的代码检查它,如果它存在,则调用它。
例如,有一个"Layout"插件,我已经用过几次了。这个插件需要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:我已经为onShow和其他常见方法和事件写了几十次代码,并将其整合到一个名为Backbone.Marionette的Backbone插件中,这样我就不必再写了。
http://github.com/derickbailey/backbone.marionette
当然,在这个附加组件中,除了这个之外还有很多可用的东西。
您可以使用主干$
方法(如this.$('todo')
)来使用上下文范围的jquery查询,这将允许您在尚未添加到文档DOM树的当前视图DOM片段中进行搜索。
根据我在render方法或某种帮助函数中添加jquery插件绑定的经验,如果有更多的自定义绑定,则在创建模板后将从render方法调用这些绑定。
- 如何在Angular2中使用jQuery插件
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- 我的jQuery插件参数没有正确启动,遇到了问题
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- TableExport jquery插件:文件名和扩展名问题
- 如何在使用selectBoxIt JQuery插件时检测选项更改
- jQuery插件-从插件中调用公共方法
- 扩展jQuery插件以更改配置
- "工具提示"jQuery插件坏了
- 不能在图像中的地图标记中使用花式框jquery插件的区域标记
- 使用Booklet Jquery插件,我如何验证最后一页是否显示
- 合并TinyMCE(jQuery插件)文件
- 带有jquery插件的backbone.js视图
- 自制jQuery插件已触发,但无法工作
- 我如何才能找到哪些网站使用我的jQuery插件
- jquery插件或javascript方法自动调整文本输入(而非文本区域)(固定宽度)可变高度的大小
- 在多个元素上使用jquery插件,只需稍作修改
- HtmlBox(jquery插件)在ajax调用中不起作用
- 构造jQuery插件
- 使用filedownload jquery插件处理FilePathResult返回值