2012-08-01 24 views
6

バックボーンのイベントオブジェクトで使用されている関数の引数が必要です。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 
    } 
}); 

今開いているの定義をしてみましょう:

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

私は別の関数からオープン呼び出すと、私はそれを呼び出す際にIDを渡します。だから私はIDを渡すかどうかに基づいて、私は別のものを行う必要があります。バックボーンでこれをどうやって行うのですか? 現在のところ、idをクリックして呼び出すと、定義されていないと予想されます。しかし、イベントオブジェクトが渡されます。

なぜこれが起こり、どのように引数を渡すことができますか?

+0

これが関連している - http://stackoverflow.com/questions/5680807/backbone-js-events-knowing-what-was-clicked –

答えて

5

もう一つの方法は、クリックを処理する全く異なる方法を使用することであり、それは別のプロセスによって呼び出すことができるように、「オープン」を呼び出します。別の人が言及したように、イベントハッシュで指定するメソッドはjqueryデリゲートラッパーであるため、代理人が提供するものが得られるので、paramsに関してはあまりできません。だから、その場合には、オープン呼び出します実際のアイコンのクリックを行い、別の方法で作成します。

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

2

あなたが真かどうかをチェックするためにはJavaScript typeof()を使用するかは、IDがUnderscoreJS

4

から_.isObjectを持つオブジェクトである場合は、ここで見ることができます確認することができますID変数の型を知っている場合: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の答えは、(実際に、私は彼らのために投票)最高だと思います。しかし、実際に関数が1つしかない場合は、idを2番目のパラメータにして、最初のパラメータを無視することができます。

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

    } 
}, 

someOtherMethod : function(){ 
    this.open(null, id); 
} 
関連する問題