Backbone.js: Actualizați colecția cu date diferite

Am o colecție Backbone de modele care au date diferite care vin în încărcarea paginii decât atunci când sunt preluate.

De exemplu, atributele care apar în încărcarea paginii sunt:

[{ name: 'cat', color: 'yellow' },
 { name: 'dog', color: 'brown' },
 { name: 'fish', color: 'orange' }]

Apoi, la preluare() (sau actualizată în alt mod de la server în timp ce pagina trăiește, datele arată astfel:

[{ name: 'cat', current: 5, total: 100 },
 { name: 'dog', current: 6, total: 50 },
 { name: 'fish', current:7, total: 25 }]

Cum pot actualiza Colecția Backbone cu noile date păstrând în același timp datele vechi? ID-urile nu sunt atribuite de pe server (numele este garantat unic).

1
Definiți "reține". Vrei să spui salvați datele vechi într-o anumită variabilă? Sau mai mult păstrează atât datele vechi cât și cele noi din aceeași instanță de colecție?
adăugat autor Crescent Fresh, sursa
atunci codul fetch() încorporat nu face ceea ce vrei? Din docs : Dacă doriți să adăugați modelele primite la colecția curentă, în loc să înlocuiți conținutul colecției, trimiteți {add: true} ca opțiune de preluare.
adăugat autor Crescent Fresh, sursa
Acestea din urmă (păstrați atât datele vechi cât și cele noi din aceeași instanță de colecție)
adăugat autor Muers, sursa
@CrescentFresh Dar preluați nu actualizați/adăugați orice modele cu id care există încă. Deci o colecție de la întrebare nu se va schimba.
adăugat autor theotheo, sursa

1 răspunsuri

Am terminat cu asta. Acest lucru va actualiza proprietățile pentru modelele existente în timp ce elimină și modelele care nu au venit și adăugând altele noi.

Backbone.Collection.prototype.update = function(col_in){  
  var self = this,
      new_models = [];

  _(col_in).each(function(mod_in) {
    var new_model = self._prepareModel(mod_in),
        mod = self.get(new_model.id);
    if (mod) { 
      new_models.push(mod.set(mod_in, {silent:true}));
    } else { 
      new_models.push(mod_in);
    }
  });

  this.reset(new_models);
};

Rețineți utilizarea _prepareModel aceasta este importantă pentru ca modelele să poată fi identificate prin orice proprietate "id" utilizată în obiectul Modelul Backbone.

0
adăugat
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com