在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();
这是正确的做法吗?。
答案 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渲染。