2012-08-01 36 views
6

我需要在Backbone中的events對象中使用的函數的參數。如何將參數傳遞給束縛在backbone.js中事件對象中的函數

var DocumentRow = Backbone.View.extend({ 

    tagName: "li", 

    className: "document-row", 

    events: { 
     "click .icon": "open", 
     "click .button.edit": "openEditDialog", 
     "click .button.delete": "destroy" 
    }, 

    render: function() { 
     // do something 
    } 
}); 

現在讓開BE的定義:

function open(id) { 
    if (id) { 
     // do something 
    } else { 
     // do something else 
    } 
} 

我會從另一個調用函數打開,將通過ID,當我把它。所以根據我是否通過id我需要做不同的事情。我如何在Backbone中執行此操作? 目前,通過點擊呼叫時,我希望它是未定義的ID。但是一個事件對象被傳遞。

爲什麼會發生這種情況,我該如何傳遞一個參數?

+0

這是有關 - http://stackoverflow.com/questions/5680807/backbone-js-events-knowing-what-was-clicked – 2013-12-02 20:04:12

回答

5

另一種方式來處理,這是使用該處理點擊一個完全不同的方法,並呼籲「開放」,因此它可以被其他進程調用。正如另一個人提到的,您在事件散列中指定的方法是jquery委託包裝器,因此您可以做的事情不多,因爲您將得到的代碼是什麼。因此,在這種情況下,創建另一個執行實際點擊圖標,將調用open方法:

events: { 
    "click .icon": "open", 
    "click .button.edit": "openEditDialog", 
    "click .button.delete": "destroy" 
}, 
/** 
* Specifically handles the click and invokes open 
*/ 
handleIconClick : function(event) { 
    // ...process 'event' and create params here... 
    this.open(params); 
}, 
/** 
* This can be called remotely 
*/ 
open : function(id) { 
    if (id) { 
     // do something 
    } else { 
     // do something else 
    } 
} 
+0

什麼是這裏的進程 – shiva 2014-10-21 08:39:14

2

如果你知道ID變量的類型,你可以使用JavaScript typeof()檢查是否屬實,或者你可以檢查,如果ID是_.isObject對象從UnderscoreJS

4

,你可以在這裏看到:http://backbonejs.org/docs/backbone.html#section-156

最關鍵的一句話是:

this.$el.delegate(selector, eventName, method); 

因爲骨幹的事件是jQuery的委託(http://api.jquery.com/delegate/),所以參數傳遞恰恰是jQuery的代表默認參數PAS SED。

你可以這樣更新您的代碼:

...... 

open : function(event) { 
    //get id from event 
    var id = event.xxx ;//pseudo code 
    if (id) { 
     this.openid(id); 
    } else { 
     // do something else 
    } 
}, 
//your another function direct call openid 
openid: function(id){ 
    // do something 
} 
...... 
0

我覺得布倫丹或fejustin的回答是最好的(其實我投票給他們)。但是如果你真的只承擔一項功能,那麼你可以讓id成爲第二個參數,而忽略第一個參數。

open : function(evt, id){ 
    if(id){ 
    //whatever 
    } else { 

    } 
}, 

someOtherMethod : function(){ 
    this.open(null, id); 
} 
相關問題