Wie ersetze ich ein Modell in einer Backbone.Collection?

8

Angenommen, ich habe ein Backbone.Collection mit drei Modellen. Ich möchte den mittleren ersetzen, indem ich das erste und das dritte Modell in ihrer aktuellen Position halte. (Angenommen, es gibt keine comparator .) Wie mache ich das?

    
Trevor Burnham 06.06.2011, 18:25
quelle

5 Antworten

18

Dies ist eine gute Frage und noch heute relevant, also lohnt es sich zu antworten.

Es ist möglich, dass die Funktionalität, die in meiner Antwort verwendet wurde, nicht vorhanden war, als Sie die Frage gestellt haben, aber es ist jetzt ganz einfach, dies zu tun.

Nehmen wir an, Ihre Sammlung heißt myCollection und enthält bereits 3 Modelle. Sie können auch sagen, dass Sie ein neues Modell mit dem Namen newModel haben, das Sie verwenden möchten, um das vorhandene mittlere Modell in der Sammlung zu ersetzen. Um das mittlere Modell zu ersetzen und das erste und dritte Modell unverändert zu lassen, können Sie Folgendes tun:

%Vor%

Dies wird genau das tun, was Sie wollen, und das remove -Ereignis für das entfernte Modell und das add -Ereignis für die Ersetzung auslösen, was Sie auch wollten.

    
dcarson 08.07.2013, 00:17
quelle
5

Es gibt einen einfachen Mechanismus, der in Backbone integriert ist, der dieses Problem behandelt

myCollection.add(newModel, {merge: true});

    
John Clarke Mills 03.04.2014 19:07
quelle
2

Sie könnten eine replaceAt-Funktion in der Backbone-Sammlung einführen, die in etwa so aussieht:

%Vor%

Es basiert auf den Methoden _add und _remove. Es sollte die entsprechenden Ereignisse auslösen, die Sie suchen, aber ich habe das nicht getestet. Ich habe getestet, dass es ein Element in der Sammlung an der entsprechenden Stelle ersetzen würde.

(mit Backbone .3.3)

    
c3rin 06.06.2011 19:47
quelle
0

Eine Möglichkeit besteht darin, das Array collection.models direkt zu ändern und dann

aufzurufen %Vor%

Dies ruft jedoch ein add -Ereignis auf, das jedes Modell auflistet. Idealerweise würde ich ein remove -Ereignis für das entfernte Modell und ein add -Ereignis für das neue aufrufen. Ich bin mir nicht sicher, ob das möglich ist, ohne ein comparator zu verwenden und Indizes auf meinen Modellen hinzuzufügen ...

    
Trevor Burnham 06.06.2011 18:28
quelle
0

Obwohl diese Frage vor langer Zeit gestellt wurde, ist sie sogar für heute relevant.
Und eigentlich ist es sehr einfach.

  1. Wir müssen den alten Modellindex in der Sammlung finden.
  2. und fügen Sie dann das neue Element an derselben Indexposition in die Auflistung ein und führen Sie
  3. zusammen

schau im folgenden Beispiel:

%Vor%

Ich hoffe, es würde jemandem helfen ...
Viel Glück!

    
Evyatar Nezer 12.12.2013 01:34
quelle

Tags und Links