Javascript 主干,如何确保视图中声明的函数只影响该视图中的DOM元素?
以下视图绑定到cars元素 当视图初始化时,我加载一个特定的模板,该模板加载一个名为”的div 现在,我想对该菜单执行一些操作,用hmtl填充它,我只希望视图内部的菜单受到影响。 如果该页面上有另一个“菜单”,在视图之外,它将受到影响 如何确保视图中的JavaScript只影响该视图中的元素Javascript 主干,如何确保视图中声明的函数只影响该视图中的DOM元素?,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,以下视图绑定到cars元素 当视图初始化时,我加载一个特定的模板,该模板加载一个名为”的div 现在,我想对该菜单执行一些操作,用hmtl填充它,我只希望视图内部的菜单受到影响。 如果该页面上有另一个“菜单”,在视图之外,它将受到影响 如何确保视图中的JavaScript只影响该视图中的元素 var myView = Backbone.View.extend({ el : '.cars', pag : '.pagination', initialize : func
var myView = Backbone.View.extend({
el : '.cars',
pag : '.pagination',
initialize : function () {
var template = _.template(myTemplate, {});
$(this.el).html(template);
$('.menu').html('test');
},
events : {
'click .pagination a' : 'click'
},
});
我可以这样做:
$('.cars .menu').html('test');
但我认为应该有一个更优雅的解决方案,比如将.menu绑定到视图
第二个问题
如果我将单击事件绑定到视图中名为.pagination的div。。。如何在events对象中使用变量而不是写入元素的名称?视图的
el
中的html可以在find
范围内:
yourView.$el.find(".menu");
或通过上述方法的快捷方式:
yourView.$(".menu");
考虑到第二个问题,您还可以使用事件绑定到视图中的元素:
// in the model definition
events: {
// This would only bind to clicks for .pagination elements that are
// children of the view
'click .pagination a' : function (e) {
// You can get at the clicked element via the `currentTarget` property
// of the event
var href = $(e.currentTarget).attr('href');
console.log(href);
}
}
我会编辑并问你一些其他的问题,也许你能帮上忙。Ty非常喜欢:)我没有测试它,事件部分(就像你读了我的心思)-你是说有另一个div叫做menu,在视图之外,它不会受到点击的影响吗?没错。它通过视图的
el
使用事件委派。元素内部的事件向上传播。我正在开发一个应用程序,它开始打包。很难学会如何使用require、主干、下划线、模板。。。但现在我可以开始看到,这使得分配内容变得多么简单,我没有编辑它以使用currentTarget
<例如,如果链接中有span
s等,则code>target可能会产生误导。