underscore tutorial significado react network meaning collection backbonejs backbone javascript backbone.js backbone-collections

javascript - tutorial - Opciones de la colección Backbone.js



backbonejs github (2)

He escrito un modelo / vista / colección usando Backbone.js. Mi colección usa el método fetch para cargar los modelos desde un servidor remoto. La URL requerida para esta colección necesita una identificación como: messages / {id}. Pero no he encontrado una forma clara de pasar opciones a la Colección.

La vista backbone.js acepta opciones al pasarla a la construcción: view ([options]), pero la colección espera una lista de modelos al momento de la construcción: collection ([models]).

¿Cuál es la forma más "limpia" de pasar parámetros / opciones a esta colección?

Código acortado:

var Messages = Backbone.Collection.extend({ model: Message, url: ''http://url/messages/'' + id });


De la forma en que tiene la propiedad url declarada, el valor se determinará una vez cuando el navegador cargue inicialmente el archivo javascript, y ''id'' no estará definido.

El Backbone.Collection acepta opciones como el segundo argumento en su constructor, por lo que puede pasar el valor de id como una opción y luego establecer el valor de la URL dentro de la función de inicialización de la colección.

Aquí hay un ejemplo

var Messages = Backbone.Collection.extend({ initialize: function(models, options) { this.url = ''http://url/messages/'' + options.id; }, model: Message, }); var collection = new Messages([], { id: 2 }); collection.fetch();


La respuesta de @ Paul es buena, pero también vale la pena señalar que el atributo url puede ser una función. En mi opinión (y es solo opinión, ya que el resultado final es el mismo), el código es un poco más legible, si es más detallado, si configura el ID en initialize y la referencia en una función:

var Messages = Backbone.Collection.extend({ initialize: function(models, options) { this.id = options.id; }, url: function() { return ''/messages/'' + this.id; }, model: Message, }); var collection = new Messages([], { id: 2 }); collection.fetch();

Sin embargo, para estar seguro, no confundes la id aquí con la id del modelo, ¿o sí? La respuesta de @ Paul y mi código anterior asumen que tienes múltiples colecciones de Messages , cada una con su propia identificación. Si la ruta /messages/<id> API /messages/<id> realidad se refiere a un mensaje , no a un conjunto de mensajes, entonces solo necesita configurar la url en /messages/ en Collection, y Backbone usará automáticamente /messages/<id> para cada modelo.