Backbone: Geben Sie model.set eine Parse-Option

Erstellt am 21. Juni 2013  ·  13Kommentare  ·  Quelle: jashkenas/backbone

Das Sammlungsgegenstück von set ermöglicht es Ihnen, eine "parse"-Option bereitzustellen, um die Parserfunktion auszuführen, bevor das Sammlungsobjekt verarbeitet wird. Dies ist praktisch, wenn Sie Bootstrap-Daten haben, aus denen Sie eine Sammlung erstellen möchten, da diese nicht die Abruffunktion durchlaufen.

Gibt es einen Grund, warum das Modellobjekt nicht dieselbe Option für die parallele Sammlung bietet? Es erscheint mir widersprüchlich, dass darauf verzichtet wird.

Bearbeiten: Bei weiterer Überprüfung respektiert Reset immer noch die Parse-Option.

duplicate

Hilfreichster Kommentar

Ich verwende derzeit tatsächlich model.set(model.parse(data)), da die Parse-Option fehlt. Dies wäre wirklich schön, um die Konsistenz mit collection.reset usw.

Alle 13 Kommentare

Ich würde mich bezüglich der @caseywebdev wenden, aber ich denke, es ist sicherlich vernünftig, API-Parität zwischen Modellen und Sammlungsanalyse zu haben. Danke für das Öffnen eines Problems @etler!

Die Implementierung sollte ziemlich einfach sein. Ich denke, die Hauptfrage ist, ob es einen Grund gibt, dies nicht zu tun? Was würde außerdem passieren, wenn ein Schlüsselwert anstelle eines Attributobjekts bereitgestellt würde?

Das hört sich gut an, aber der Fall, der einen Haken an meinem Kopf verursacht, ist parse mit defaults ( beachte die Reihenfolge der Ereignisse hier ). Ich würde mich über eine PR mit Ihren Umsetzungsgedanken freuen.

Super, da würde ich gerne mal reinschnuppern.

Ich wollte eigentlich auch ein Ticket dafür eröffnen - bin dann aber auf #2013 gestoßen... obwohl ich vermute, dass das war, bevor es ein Collection#set .

Ich stimme @wookiehangover zu, dass die API-Parität wünschenswert wäre, und ich bin auf Fälle model.set(model.parse(data)) wie in der andere Fahrkarte).

@tgriesser Ich weiß nicht, wie ich dieses Problem verpasst habe! Ich stimme dieser Diskussion für diesen Anwendungsfall zu, aber ich denke, ein zwingenderer Anwendungsfall ist das Analysieren von Bootstrapping-Daten (sowie das verschachtelte Parsing, das ich auch mache). Ich habe auch die gleiche Problemumgehung verwendet, aber wie Sie sagten, gibt es jetzt, da es ein Collection#set gibt, auch ein Paritätsargument.

Was ist der tatsächliche Anwendungsfall, um dies zu benötigen?

Wenn Sie set für ein vorhandenes Modell aufrufen möchten, parse . Diese Funktion habe ich mir schon mehrfach gewünscht.

class Book extends Models.Document
   constructor: ->
      <strong i="8">@info</strong> = new InfoModel()
      <strong i="9">@chapters</strong> = new ChaptersCollection()
      super

   parse: (attrs, options) ->
      @info.set(attrs.info, options)
      @chapters.set(attrs.chapters, options)
      _.omit(attrs, 'info', 'chapters')

Jetzt können Sie dies tun:

book.set({
  title: 'title',
  info: {
    some: data
    someNested: {
        otherData: ...
    }
  },
  chapters: [{...}, {...}]
}, {parse: true});

und es sollte funktionieren... (ja, model.set(model.parse( funktioniert, aber es ist einfacher, dieselbe API zum Parsen verschachtelter Daten in Sammlungen und Modellen zu haben)... obwohl es mit der Ausgabe von #2623 nur so weit funktioniert Nieder.

Hat jemand eine Idee, wie diese Änderung mit Standardeinstellungen funktionieren würde? Und ohne Doppelparsing?

Damit es mit den Standardeinstellungen funktioniert, habe ich ein options.defaults , das in der Initialisierungsfunktion an set , damit sie nach dem Parsing-Schritt angewendet werden können. Ich weiß nicht, ob das eine Designentscheidung ist, die wir wollen, aber ich konnte mir keine alternative Lösung vorstellen.

Lassen Sie uns dieses Gespräch in die offene PR verschieben...

Gibt es dazu ein Update?

Ich verwende derzeit tatsächlich model.set(model.parse(data)), da die Parse-Option fehlt. Dies wäre wirklich schön, um die Konsistenz mit collection.reset usw.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen