Javascript 是否每次呈现主干视图时都使用jQuery选择相同的元素
是否有必要为渲染的每个主干视图选择相同的DOM元素并对其执行某些操作?在任何时候都只存在此视图中的一个 例如,假设引导的选项卡(tabbable插件)必须用于特定的主干视图Javascript 是否每次呈现主干视图时都使用jQuery选择相同的元素,javascript,jquery,twitter-bootstrap,Javascript,Jquery,Twitter Bootstrap,是否有必要为渲染的每个主干视图选择相同的DOM元素并对其执行某些操作?在任何时候都只存在此视图中的一个 例如,假设引导的选项卡(tabbable插件)必须用于特定的主干视图产品。在render函数中包含选项卡插件的初始化代码是否正确 render: function() { this.$el.html( this.template( this.model.toJSON() ) ); // Activate Twitter Bootstrap Tabs $('.tab-
产品。在render
函数中包含选项卡插件的初始化代码是否正确
render: function() {
this.$el.html( this.template( this.model.toJSON() ) );
// Activate Twitter Bootstrap Tabs
$('.tab-bar').tab();
$('.tab-bar .tab:first').tab('show');
$('.tab-bar .tab').click(function(e) {
e.preventDefault();
$(this).tab('show'); });
return this;
}
或者有没有一种方法可以只调用此选择器一次,它将为类为.tab bar
的所有元素(包括那些尚未存在的元素)触发
类似地,如果我想在第一个选项卡上使用click处理程序
$('.tab:first').click(function(){
console.log('hey!')'
}
我是否将其放置在该视图的render
函数中?如果我这样做,如果视图被多次渲染,它是否会创建许多单击事件监听器?您需要在initialize方法中绑定事件监听器,而不是在渲染中绑定事件监听器。除非要多次重新呈现DOM元素
编辑
您需要在initialize方法中绑定事件侦听器,而不是在render中。除非要多次重新呈现DOM元素
编辑
在DOM元素存在之前绑定到它可以吗?类似于绑定到$('.tab:first')
然后使用render
渲染它。我将使用不同的模型属性/数据重新渲染相同的视图。因此,与DOM一样,DOM元素将被渲染,然后关闭,然后再次渲染(很可能使用不同的模型数据)。它有点像弹出框的视图,不能将事件侦听器绑定到不存在的DOM元素。最好是在视图中的events对象中设置一些事件处理程序。我会更新我的答案。谢谢你的编辑。我似乎无法在事件
对象中使用Twitter引导的.tab()
,我想,do\u something
方法将接收名为事件
的参数。您可以使用它访问创建单击事件的DOM元素。然后可以使用$(event.currentTarget)
将其转换为jQuery对象,然后可以使用.tabs()方法。在DOM元素存在之前可以绑定到它吗?类似于绑定到$('.tab:first')
然后使用render
渲染它。我将使用不同的模型属性/数据重新渲染相同的视图。因此,与DOM一样,DOM元素将被渲染,然后关闭,然后再次渲染(很可能使用不同的模型数据)。它有点像弹出框的视图,不能将事件侦听器绑定到不存在的DOM元素。最好是在视图中的events对象中设置一些事件处理程序。我会更新我的答案。谢谢你的编辑。我似乎无法在事件
对象中使用Twitter引导的.tab()
,我想,do\u something
方法将接收名为事件
的参数。您可以使用它访问创建单击事件的DOM元素。然后可以使用$(event.currentTarget)
将其转换为jQuery对象,然后可以使用.tabs()方法。
window.myView = Backbone.View.extend({
events: {
'click #someElementID': 'do_something',
},
initialize: function(){
_.bindAll(this, 'render', 'do_something');
},
.....
do_something: function(e){
console.log("A click was made!", e.currentTarget);
}
});