Probabilmente non si desidera utilizzare solo Collection.fetch()
, perché non si otterrà il vantaggio della memorizzazione nella cache sul lato client: eliminerà gli elementi già caricati dal server e verrà ripristinata la raccolta. Probabilmente dovrai estendere lo Backbone.Collection
con una funzione personalizzata per recuperare più oggetti. Ho usato il seguente codice in un recente progetto:
Backbone.Collection.extend({
// fetch list without overwriting existing objects (copied from fetch())
fetchNew: function(options) {
options = options || {};
var collection = this,
success = options.success;
options.success = function(resp, status, xhr) {
_(collection.parse(resp, xhr)).each(function(item) {
if (!collection.get(item.id)) {
collection.add(item, {silent:true});
}
});
if (!options.silent) collection.trigger('reset', collection, options);
if (success) success(collection, resp);
};
return (this.sync || Backbone.sync).call(this, 'read', this, options);
}
});
Questo è in gran parte copiato dal codice predefinito fetch()
, ma invece di cadere elementi esistenti si aggiungerà di nuovi. Probabilmente vorresti implementare qualcosa sul lato server, usando l'oggetto options
come Julien
suggerisce di passare i parametri di quali elementi vuoi caricare, probabilmente un numero di pagina (se vuoi controllare le dimensioni della pagina sul server) o una coppia start-stop (se si desidera controllarla sul client).
** ** 1 Ok destra in modo è necessario solo per avere i dati che sono attualmente sulla pagina in vostre collezioni spina dorsale? ** 2. ** Per scaricare un modello dal back-end devo prima crearlo usando l'ID rilevante e quindi chiamare fetch. Questo innescherà un evento "aggiungi" su quella raccolta? O per quanto riguarda Backbone, il modello non è in collezione? – wilsonpage
Anche qual è l'argomento "pagina" di cui parli? È questa la funzione che ha costruito l'attributo 'url'? per esempio. 'url: function() {return x +"/"+ y +"/"+ z;' – wilsonpage
1. Giusto. 2. No, dovrai aggiungerlo alla raccolta pertinente. 3. Puoi usare gli attributi url, ma penso che nelle versioni più recenti di backbone puoi inviare opzioni alla chiamata ajax con fetch, refresh ecc. Fetch ({data: "la tua query qui"}) – Julien