2012-01-25 8 views
14

¿Qué es "opciones" en Backbone.js que veo todo el source code oficial y también se utiliza en un blog tutorial de Thomas Davis con código de ejemplo aquí:¿Qué es "opciones" en Backbone.js?

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

que aún no hay otros tutoriales usándolo, e incluso el doc mencionándolo. Sí, pero en un tipo de formato de contexto ([opciones]), no en "opciones" codificadas: options.view.addFriendLi

Respuesta

16

, convencionalmente, es un objeto javascript de pares clave/valor que proporcionan datos/contexto/argumentos/configuración a una llamada a un método. Piénselo como argumentos con nombre, a diferencia de los argumentos ordenados.

Por ejemplo:

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 :(

¿Cómo se llama la función que se utiliza este objeto, es decir hasta que la función.

La documentación para la red troncal para Collection.initialize() no parece enumerar qué teclas del objeto de opciones se usan o se esperan, lo que es desafortunado. Entonces, sin mirar la fuente, no hay forma de saberlo. Pero su ejemplo parece indicar que se espera una clave view. Así que se podría llamar así:

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

Esto es simplemente una convención muchas bibliotecas tienden a usar, y no hay nada de especial. Pero generalmente muchas teclas en un objeto que se pasan a una llamada a función son mejores que una función a la que se llama con muchos argumentos, porque cada valor tiene una etiqueta que deja en claro para qué sirve cada valor.


Mirando un poco más lejos, ahora aquí: http://documentcloud.github.com/backbone/docs/backbone.html#section-53

Parece que Collection.initialize() sólo acepta una sola tecla en ella de opciones: comparator. Aquí se puede definir una función que se utiliza para ordenar los modelos de la colección: http://documentcloud.github.com/backbone/#Collection-comparator

de trabajo que en su ejemplo, tendría que llamar a que de esta manera:

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

Me gusta tu respuesta. Definitivamente aprendí algo de él, así que +1, pero lo estoy pidiendo en el contexto de Backbone.js.No es [opciones] lo que estoy pidiendo, sino una "opción" codificada para incluir Backbone.js. Sin embargo, gran respuesta en un contexto diferente :) –

+0

Editado con más acerca de cómo la red troncal maneja específicamente las opciones en este método. –

+0

Bueno, eso tiene sentido. Gracias por el tiempo :) –

1

Bueno, se puede ver el blog tutorial Thomas Davis con el código de ejemplo, la Backbone.View.extend a responder a su pregunta:

.... 
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 clave es this.friends=new Friends(null, {view:this});

en el código anterior initialize:function(models, options)

Así se puede saber, las "opciones" == "{vista: esta}"

crea un nuevo amigos y pasa un parámetro ({vista: esta}) , luego se pasa a la función anterior.

Combinamos el código options.view.addFriendLi, podemos saber por qué puede llamar al método .addFriendLi.