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.
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...
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.