簡體   English   中英

如何在backbone.js中動態定義事件

[英]How to define events dynamically in backbone.js

我的視圖中有更多點擊事件

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

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定義一個函數。 Backbone View的el屬性必須.link的父級。 在內部對象{}您需要使用: =當您定義variablefunction ,而不是使用this. 字首。 您必須定義新Viewnew 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文檔: 這里

el property documentation: 這里


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/

... Byee

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM