gpt4 book ai didi

javascript - 如何在 backbone.js 中动态定义事件

转载 作者:行者123 更新时间:2023-11-30 12:23:08 25 4
gpt4 key购买 nike

我的 View 中有更多点击事件,例如

events:{
'click #link1':'showDetails',
'click #link2':'showDetails',
'click #link3':'showDetails',
'click #link4':'showDetails',
'click #link5':'showDetails',
'click #link6':'showDetails',
'click #link7':'showDetails',
'click #link8':'showDetails',
'click #link9':'showDetails',
'click #link10':'showDetails',
'click #link11':'showDetails',
'click #link12':'showDetails',
'click #link13':'showDetails',
'click #link14':'showDetails',
'click #link15':'showDetails',
'click #link16':'showDetails',
'click #link17':'showDetails',
'click #link18':'showDetails',
'click #link19':'showDetails',
'click #link20':'showDetails',
'click #link21':'showDetails'
}

有没有办法让它动态化。因为将来点击事件的数量可能会增加。

注意:我可以在数组中获取这些 id(#etox_link 等)。

请发表您的建议。

最佳答案

你可以这样做:

单个事件:

events:{
'click .link':'showDetails',
}

函数显示细节:

showDetails : function(e){
var _type = $(e.target).attr("id").toUpperCase();
var _callbackName = "show"+_type+"Details";
if(typeof this[_callbackName] !== "function") return console.log("No callback named:",_callbackName);
this[_callbackName].call(this,e);
},

showAESDetails : function(e){
console.log("Do something!");
}

编辑以回应 OP 评论:在这个过程中,您必须为页面中 .link 元素中的每个 ID 定义一个函数。主干 View 的 el 属性必须.link 的父级。在对象 {} 中,当您定义 variablefunction 时,您需要使用 : 而不是 = ,而不是使用 this. 前缀。您必须定义新的 View (new View) 才能看到脚本有效。

工作示例

JS/主干

var View = Backbone.View.extend({
el : "body", //must be parent of .link elements
events:{
'click .link':'showDetails'
},
showDetails : function(e){
console.log("event");
var _type = $(e.target).attr("id").toUpperCase();
var _callbackName = "show"+_type+"Details";
this[_callbackName].call(this,e);
},

showAESDetails : function(e){ //an example of callback
console.log("Hello!");
}

//you must define the callback of all ID
});

new View();

注意

e.target 文档:Here

el 属性文档:Here


HTML

此脚本适用于 HTML,例如:

<a class="link" id="link1" href="#">Foo</a>
<a class="link" id="link2" href="#">Foo</a>
<a class="link" id="link3" href="#">Foo</a>
<a class="link" id="link4" href="#">Foo</a>
<a class="link" id="link5" href="#">Foo</a>
<a class="link" id="link6" href="#">Foo</a>
<a class="link" id="link7" href="#">Foo</a>
<a class="link" id="link8" href="#">Foo</a>
<a class="link" id="link9" href="#">Foo</a>
<a class="link" id="link10" href="#">Foo</a>
<a class="link" id="link11" href="#">Foo</a>
<a class="link" id="link12" href="#">Foo</a>
<a class="link" id="link13" href="#">Foo</a>
<a class="link" id="link14" href="#">Foo</a>
<a class="link" id="link15" href="#">Foo</a>
<a class="link" id="link16" href="#">Foo</a>
<a class="link" id="link17" href="#">Foo</a>
<a class="link" id="link18" href="#">Foo</a>
<a class="link" id="link19" href="#">Foo</a>
<a class="link" id="link20" href="#">Foo</a>
<a class="link" id="link21" href="#">Foo</a>

示例:http://jsfiddle.net/p10masvr/6/

...再见

关于javascript - 如何在 backbone.js 中动态定义事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30372703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com