2012-08-01 3 views
6

Ich brauche Argumente zu den Funktionen, die im Ereignisobjekt in Backbone verwendet werden.Wie Argumente an Funktionen übergeben werden, die im Ereignisobjekt in backbone.js gebunden sind

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 
    } 
}); 

nun die Definition offen lassen:

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

ich aus einer anderen Funktion offen nennen und wird id passieren, wenn ich es nennen. Also, basierend darauf, ob ich ID passiere oder nicht, muss ich verschiedene Dinge tun. Wie mache ich das in Backbone? Zur Zeit ID, wenn über einen Klick aufgerufen, ich erwarte, dass es nicht definiert ist. Aber ein Ereignisobjekt wurde übergeben.

Warum passiert das und wie kann ich ein Argument übergeben?

+0

Dies ist in Verbindung stehend - http://stackoverflow.com/questions/5680807/backbone-js-events-knowing-what-was-clicked –

Antwort

5

Ein anderer Weg, um diesen Ansatz ist eine ganz andere Methode zu verwenden, die den Klick Griffe und Anrufe „öffnen“, so kann es von einem anderen Prozess aufgerufen werden. Wie eine andere Person erwähnt, sind Methoden, die Sie im Ereignis-Hash angeben, jquery-Delegate-Wrapper. Sie können also nicht viel mit params machen, denn was Sie bekommen, ist was delegate zur Verfügung stellt. Also in diesem Fall, eine andere Methode erstellen, die das eigentliche Symbol klicken tut, die offen aufruft:

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

was ist der Prozess hier – shiva

2

Wenn Sie die Art des ID-Variable kennen, können Sie Javascript typeof() verwenden, wenn wahr zu überprüfen oder Sie können überprüfen, ob ID-Objekt mit _.isObject von Underscore.js

4

Sie hier sehen können: http://backbonejs.org/docs/backbone.html#section-156

Die kritische Satz ist:

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

weil Rückgrat der Ereignisse jQuerys Delegierten (http://api.jquery.com/delegate/) sind, so dass die Parameter übergeben werden gerade ist Parameter Delegat Standard pas des jquery sed.

können Sie Ihren Code wie folgt aktualisiert:

...... 

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

denke ich Brendan oder fejustin die Antworten sind die besten (eigentlich für sie ich gestimmt). Aber wenn Sie wirklich nur eine Funktion haben, können Sie den zweiten Parameter id machen und den ersten ignorieren.

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

    } 
}, 

someOtherMethod : function(){ 
    this.open(null, id); 
} 
Verwandte Themen