javascript - backbone.js colección obtener vars
collections (4)
Esto parece obvio, pero de alguna manera me lo estoy perdiendo ...
¿Cómo enviar opciones junto con un backbone.js collection fetch ()?
O, desde un punto de vista más amplio: tengo un gran conjunto de datos en el servidor, mensajes en este caso, que quiero hacer accesibles a través de una colección. Al ver que podría haber miles de mensajes, no quiero simplemente recogerlos y guardarlos todos a la vez, por lo que mi colección tendría que al menos comprender los límites y las compensaciones. Por no hablar de consultar las listas filtradas o ordenadas.
¿Es una colección troncal incluso la forma de manejar esto?
Aclamaciones
Considere este código, donde cuando crea una instancia de su colección, pasa las preferencias para su desplazamiento, límite o clasificación. La inicialización toma valores predeterminados si no se proporcionan las preferencias. Y luego la función url los agrega a la llamada al servidor. A partir de entonces, tendrá que actualizar potencialmente estos valores (probablemente solo el desplazamiento), al procesar las respuestas del servidor.
MessageList = Backbone.Collection.extend({
initialize: function(models, options) {
options || (options = {});
this.offset = options.offset || 0;
this.limit = options.limit || MessageList.DEFAULT_LIMIT;
this.sortBy = options.sortBy || MessageList.DEFAULT_SORTBY;
},
url: function() {
return ''/messages?'' +
''offset='' + encodeURIComponent(this.offset) + ''&'' +
''limit='' + encodeURIComponent(this.limit) + ''&'' +
''sort_by='' + encodeURIComponent(this.sortBy);
},
parse: function(response) {
// Parse models
// Parse offset, limit, sort by, etc
}
}, {
DEFAULT_LIMIT: 100,
DEFAULT_SORTBY: ''name_asc''
});
He estado jugando con Backbone por un par de días y tuve que lidiar con este problema casi de inmediato y miré esta solución, pero la encontré torpe. Después de leer más documentación de la red troncal, descubrí que realmente puedes anular cualquiera de las opciones de jQuery.ajax dentro del método fetch (). Así por ejemplo
Posts = Backbone.Collections.extend({
model: Post,
url: ''/posts''
});
Ahora, cuando desee llamar a fetch, simplemente envíe los parámetros que desee. p.ej
var posts = new Posts();
posts.fetch({ data: { page: 3, pagesize: 10, sort: ''asc'' } });
Esto producirá la siguiente solicitud:
http://yourdomain/posts?page=3&pagesize=10&sort=asc
De todos modos, sé que ya aceptaste una respuesta, pero espero que esto ayude a alguien.
Puede agregar una identificación a la url que puede ser utilizada por el servidor para hacer una selección del envío de datos. P.ej
var EventsCollection = Backbone.Collection.extend({
model: Events,
});
var eventCollection = new EventsCollection();
eventsCollection.url = ''foo?offset=10&limit=20'';
eventsCollection.fetch();
Reemplace la función "url" de su colección y agregue los parámetros (? Param = xyz).
El parámetro de opciones de recuperación también se puede usar, ya que es el que se transmite a la llamada final de jQuery ajax. Así que si agrega un parámetro de "datos" allí se utilizará.