2012-01-25 14 views
14

ciò che è "opzioni" in Backbone.js che vedo tutto il funzionario source code e utilizzato anche in un blog tutorial di Thomas Davis con codice di esempio qui:Che cosa sono le "opzioni" in Backbone.js?

Friends = Backbone.Collection.extend({ 
    initialize: function (models, options) { 
        this.bind("add", options.view.addFriendLi); 
       } 
}); 

non vedo altri tutorial usandolo, e anche il doc che lo menziona. Lo fa, ma in un contesto tipo di formato ([opzioni]), non in una "opzione" hardcoded: options.view.addFriendLi

risposta

16

options, convenzionalmente, è un oggetto javascript di coppie chiave/valore che forniscono dati/contesto/argomenti/configurazione a una chiamata di metodo. Pensalo come argomenti nominati, al contrario degli argomenti ordinati.

Ad esempio:

var makePerson = function(name, options) { 
    var person = {}; 
    person.name = name; 
    person.age = options.age; 
    return person; 
}; 

var me = makePerson('Alex', {age:30}); // In 3 days... scary :(

Come la funzione di essere chiamato utilizza questo oggetto, è fino a quella funzione.

La documentazione per backbone per Collection.initialize() non sembra elencare quali chiavi sull'oggetto opzioni sono utilizzate o previste, il che è sfortunato. Quindi, senza guardare la fonte, non c'è modo di dirlo. Ma il tuo esempio sembra indicare che è prevista una chiave view. Così si potrebbe chiamare in questo modo:

var friendsCollection = new Friends(userModels, {view: someBackboneView}); 

Questa è semplicemente una convenzione molte biblioteche tendono ad usare, e non c'è niente di speciale. Di solito, molte chiavi in ​​un oggetto passato a una chiamata di funzione sono migliori di una funzione chiamata con molti argomenti, poiché ogni valore ha un'etichetta che rende chiaro a cosa serve ciascun valore.


Guardando un po 'più lontano, ora qui: http://documentcloud.github.com/backbone/docs/backbone.html#section-53

Sembra Collection.initialize() accetta solo una singola chiave in esso è opzioni: comparator. Qui è possibile definire una funzione utilizzata per ordinare i modelli della collezione: http://documentcloud.github.com/backbone/#Collection-comparator

di lavoro che nel tuo esempio, si potrebbe chiamare che in questo modo:

var friendsCollection = new Friends(userModels, { 
    view: someBackboneView, 
    comparator: function(friend) { 
    return friend.get('age'); 
    } 
}); 
+1

Mi piace la tua risposta. Ho sicuramente imparato qualcosa da questo in modo +1, ma lo sto chiedendo nel contesto di Backbone.js.Non sono [le opzioni] che sto chiedendo, ma una "opzione" hard-coded da withback Backbone.js. Tuttavia, ottima risposta in un contesto diverso :) –

+0

Modificato con ulteriori informazioni su come il backbone gestisce specificamente le opzioni in questo metodo. –

+0

Beh, questo ha senso. Grazie per il tempo :) –

1

Beh, si può vedere il blog tutorial Thomas Davis con codice di esempio, il Backbone.View.extend sarà rispondere alla tua domanda:

.... 
AppView=Backbone.View.extend({ 
    el:$("body"), 
    initialize:function(){ 
     this.friends=new Friends(null, {view:this}); 
     //Create a friends collection when the view is initialized, 
     //Pass it a reference to this view to create a connection between the two 
    } 
.... 

la chiave è this.friends=new Friends(null, {view:this});

Dal codice di cui sopra initialize:function(models, options)

Così si può sapere, le "opzioni" == "{vista: questo}"

crea un nuovo amici e passa in un parametro ({vista: questo}) , quindi passa a se stesso alla funzione di cui sopra.

Combina il codice options.view.addFriendLi, possiamo sapere perché può chiamare il metodo .addFriendLi.

Problemi correlati