Ember.js: Gibt es einen Grund, warum es keine öffentliche API gibt, um ein Ember.Object zurück in ein natives JS-Objekt zu konvertieren?

Erstellt am 13. Apr. 2015  ·  10Kommentare  ·  Quelle: emberjs/ember.js

Ich brauche dies sehr und frage mich, ob es Gründe dafür gibt, warum dies nicht zum Framework hinzugefügt wurde.

Ich würde denken, die Anwendungsfälle wären reichlich und offensichtlich. Ein Ember.Object fügt einem einfachen Objekt viele Metadaten und zusätzliche Eigenschaften hinzu. Wenn Sie also jemals ein Objekt mit einer generischen Funktion bearbeiten möchten, die über die Eigenschaften eines Objekts iteriert, sind diese Eigenschaften wirklich im Weg.

Needs Submitter Response

Hilfreichster Kommentar

Der Hauptgrund für die Notwendigkeit von Pojos ist die Unterstützung von Bibliotheken von Drittanbietern. Datatables, jstree usw. erwarten alle einfache Javascript-Arrays und -Objekte und werden mit ember-Datenstrukturen explodieren.

Alle 10 Kommentare

Ich denke, es hängt nur davon ab, wie Sie das Framework verwenden. Ich persönlich habe diese Notwendigkeit nie gefunden, das einzige Mal, dass ich mir vorstellen kann, dies zu wollen, wäre die Objektserialisierung und ich verwende ember-data, so dass diese Notwendigkeit nicht relevant ist.

Das heißt, wenn ich dieses Problem hätte, würde ich mit Ember.ObjectProxy und sehen, wie weit ich damit gekommen bin. Hier ist ein Beispiel: http://emberjs.jsbin.com/kapenomivu/1/edit?js ,output

generische Funktion, die über die Eigenschaften eines Objekts iteriert

dafür ist hasOwnProperty

Fühlen Sie sich frei zu verwenden, Ember.keys was mehr oder weniger Object.keys

Ember.keys(Ember.Object.create({ foo: 1 }))
>  [ 'foo' ]

Das heißt, wenn ich dieses Problem hätte, würde ich mit Ember.ObjectProxy beginnen und sehen, wie weit ich damit gekommen bin. Hier ist ein Beispiel: http://emberjs.jsbin.com/kapenomivu/1/edit?js ,output

Ich würde wahrscheinlich davon abraten, warum nicht einfach pojo direkt verwenden?

@stefanpenner Ich denke, das ist wirklich eine Frage für das OP. Ich nehme an, ich habe angenommen, dass er eine Klasse mit berechneten Eigenschaften/Funktionen/Beobachtern/usw. hatte. Ich hatte nicht daran gedacht, einfach nur mit Ember.keys iterieren, ich dachte, das würde Sachen aus der Klasse enthalten (ich schwöre es damals), aber ich war angenehm überrascht, dass dies nicht der Fall war.

Nur aus Neugier, warum würden Sie davon abraten, Ember.ObjectProxy ?

Bearbeiten: Nur um es klarzustellen, die Lösung von Ember.keys ist viel sauberer und bekommt meine Stimme. War nur neugierig, ob Sie irgendwelche negativen Gedanken speziell zu ObjectProxy .

Es gibt einige Strategien, um die ursprüngliche "Hash" -Struktur zu extrahieren, die zum Erstellen des ember-Objekts verwendet wurde (mit oder ohne geänderte Werte). Meine Frage war hauptsächlich, wie oft die allgemeine Ember.js-Community dies benötigt. eine .nativeCopy Methode wäre wirklich gut für Ember.Object aber ich weiß die Notwendigkeit zu schätzen, bei API-Ergänzungen extrem selektiv zu sein. Manchmal ist es sinnvoll, eine Methode hinzuzufügen, die eine sehr häufige Operation bequemer macht, und manchmal nicht. Ich habe das Gefühl, dass die Leute nicht so oft auf dieses Bedürfnis stoßen wie ich.

Ein konkretes Beispiel, wenn Sie neugierig sind, ist die Verwendung eines Ember.Object , um ein Formular "Neu erstellen […]" zu unterstützen. Möglicherweise befindet sich das Erstellungsformular direkt unter einer Liste von Elementen. Wenn Sie this.store.createRecord , um ein leeres Modell zu erstellen, um das Formular zu unterstützen, wird sofort ein neues Element zur obigen Liste hinzugefügt und die Werte werden beim Ausfüllen des Formulars ausgefüllt. Um dies zu vermeiden, könnte ich ein Ember.Object erstellen, um das Formular zu unterstützen, aber dann muss ich die Werte nacheinander ausgeben, um sie an createRecord

Ein letzter Grund, warum ich das oft mache, ist, eine tiefe Kopie zu erstellen, da die Implementierung von Ember.Copyable so mühsam ist. Ich mag das Design von Ember.Copyable aber eine vernünftige Standardimplementierung/generische Implementierung wäre wirklich sehr schön.

Der Hauptgrund für die Notwendigkeit von Pojos ist die Unterstützung von Bibliotheken von Drittanbietern. Datatables, jstree usw. erwarten alle einfache Javascript-Arrays und -Objekte und werden mit ember-Datenstrukturen explodieren.

@ccarterc wie zB localforage.setItem - es ist PITA mit Ember.Object
Heute damit konfrontiert und musste dafür einen benutzerdefinierten "Escaper" setzen.

Bin heute auf genau dieses Bedürfnis gestoßen. Wie @ccarterc sagte, ist dies entscheidend für

Ich möchte die Möglichkeit haben, mit einem POJO zu arbeiten, damit ich mein Objekt an eine Vanille-JS-Bibliothek eines Drittanbieters senden kann.

ja bitte - kämpfe jetzt damit für eine Drittanbieter-API. Meine aktuelle Problemumgehung besteht darin, getProperties für ein Objekt mit einem Array von etwa 70 Feldern auszuführen. das scheint albern und eine Funktion dafür zu haben wäre toll...

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen