在backbone.js中初始化jquery库的正确方法

时间:2014-02-19 06:57:13

标签: javascript jquery backbone.js

在jquery中,如果我有一个库,我可以通过执行以下操作来初始化它。

<script>
$(document.ready).ready(function(){

$("#accordion").accordion(); // Jquery accordion library

}
</script>

现在在Backbone中:

Main.js

var MyView = Backbone.View.extend({

el: '#wrapper',

initialize: function(){
this.render();
},
render: function(){
$("#accordion").accordion();
}


});
var myview = new MyView();

这是正确的做法吗?。

2 个答案:

答案 0 :(得分:3)

我认为正确的方法是改变:

$("#accordion").accordion();

为:

this.$el.find('#accordion').accordion();

来自docs

  

如果页面中包含jQuery,则每个视图都有一个$ function   在视图的元素中运行作用域的查询。如果你使用这个作用域   jQuery函数,您不必将模型ID用作查询的一部分   提取列表中的特定元素,并可以更多地依赖   HTML类属性。它相当于运行:   图。$ el.find(选择器)

答案 1 :(得分:0)

应该是

$("#accordion", this.$el).accordion();

你应该知道使用这种技术意味着dom元素可能还没有呈现,所以你的插件内部不应该引用dom - 只传递你传入的JQuery对象(一些写得不好的插件做这个)。如果您发现自己遇到问题,请使用javascript setTimeout或下划线_defer等待对象呈现到页面。

另外。如果你质疑你对更多javascript dom分离的关注(也就是淘汰或角度方法)那么你应该看看knockback。它将主干模型与knockout viewmodels和dom双向绑定合并。然后可以将JQuery插件声明为绑定,然后直接从dom模板调用它们。无需担心dom渲染。

相关问题