Ich konnte keine Möglichkeit finden, die Aufgabe einer solchen Konvertierung zu erledigen, da ich keine Möglichkeit fand, Ember.js-Eigenschaften für das Objekt zu erhalten. Ember.keys
gibt nur die Eigenschaften zurück, die ich in create
oder mit get
festgelegt habe, und die in Ember.extend
deklarierten Eigenschaften werden dort nicht angezeigt. Ich benutze solche Eigenschaften Standardwerte (zB []
für Array-Eigenschaften)Gibt es eine Möglichkeit, Ember-Objekt in ein einfaches JavaScript-Objekt zu konvertieren?
Antwort
Im Moment einzurichten ich es mit dem folgenden Ausschnitt lösen:
App.plainCopy = function (obj) {
if (Ember.isArray(obj)) {
return obj.map(App.plainCopy);
} else if (typeof(obj) === "object") {
if (App.Plainable.detect(obj)) {
return obj.plainCopy();
} else {
throw new Error(Ember.String.fmt("%@ is not Plainable", [obj]));
}
} else {
return obj;
}
}
App.Plainable = Ember.Mixin.create({
plainCopy: function() {
var props = Ember.keys(this);
var proto = this.constructor.prototype;
for(p in proto) {
if (proto.hasOwnProperty(p) && typeof(this[p])!=="function") {
props.push(p);
}
}
var copy = {};
props.forEach(function(p) {
copy[p] = App.plainCopy(this.get(p));
}, this);
return copy;
}
});
Es ist nicht die Klassenhierarchie geht und sieht nicht so aus in Mixins (wie ich für Datenobjekte verwenden, die aus dieser Sicht recht einfach sind)
Ich würde etwas ähnliches wie die Person oben tun, aber ich würde es ein bisschen anders machen.
Mixin
App.NativeObject = Ember.Mixin.create({
toNative: function() {
var properties = [];
for (var key in this) {
if (jQuery.inArray(Ember.typeOf(object[key]), ['string', 'number', 'boolean']) !== -1) {
properties.push(key);
}
}
return this.getProperties(properties);
}
});
Objekt
Dann brauchen Sie nur die App.NativeObject
mixin in Ihre Objekte zu implementieren, die Ihnen toNative
auf möchten:
var Object = Ember.Object.extend(App.NativeObject, {
name: 'Adam',
count: 4
});
Wir haben dann habe die toNative
Methode für alle Objekte, die unser Mixin implementieren.
Obligatorische jsFiddle: http://jsfiddle.net/jumUx/
Ihre Lösung ist nicht rekursiv obwohl – Qrilka
Es ist ein kleiner Schritt von diesem zu machen es rekursiv, jedoch. – Wildhoney
yep, aber sieh dir diese Gabel deiner Geige an - http://jsfiddle.net/C2Rdn/: Wenn du eine Klasse erstellst, wird "NativeObject" zusätzliche Eigenschaften wie 'isDestroyed' usw. enthalten. – Qrilka
Eine andere mögliche Lösung, die Ihren Anforderungen entsprechen können, während nicht für verschachtelte Ember Objekte vollständig rekursiv zu sein:
// where myEmberObject is.. an ember object
var plainJavaScriptObject = myEmberObject.toJSON();
Dies wird nur die tatsächlichen Eigenschaften enthalten, die Sie definiert haben und keine Gluteinbauten. Auch hier besteht der Nachteil darin, dass alle verschachtelten Ember-Objekte selbst nicht konvertiert werden, sondern als Strings im Stil von "" erscheinen.
Hier ist meine schmutzige Abhilfe
var newModel = JSON.parse(JSON.stringify(model));
Hinweis: Dies beinhaltet keine Funktionen – Jaime
Heutzutage könnte man einfach 'model.toJSON()' verwenden. –
Das ist, was ich tat und es funktioniert ganz gut. Beachten Sie, dass dies nur bereit sein sollte, da alle Änderungen an einem Objekt oder Array in dem kopierten Objekt wird das ursprüngliche Objekt
App.BaseValidations = Ember.Object.create({
toObject: function() {
var destination = {}
for (var k in this) {
if (this.hasOwnProperty(k) && typeof(this[k]) !== 'function') {
destination[k] = this[k];
}
}
return destination;
}
})
etwas ganz einfach beeinflussen, die für mich richtig genug gearbeitet ist:
Ember.Object.reopen({
toJson: function() {
return JSON.parse(JSON.stringify(this));
}
});
zur Ladezeit der App.
- 1. Gibt es eine Möglichkeit, ein Array in Klasseneigenschaften zu konvertieren?
- 2. Gibt es eine Möglichkeit, in URL Yii2 "+" in "-" zu konvertieren?
- 3. Gibt es eine einfache Möglichkeit, Kriterien in HQL zu konvertieren?
- 4. Gibt es eine kostenlose Möglichkeit, RTF in PDF zu konvertieren?
- 5. Gibt es eine Möglichkeit, Funktionstyp in Haskell zu konvertieren?
- 6. Gibt es eine Möglichkeit, ein großes Objekt in JavaScript in ein kleiner zu konvertieren?
- 7. Gibt es in Windows eine Möglichkeit, ein Errno in ein HRESULT zu konvertieren?
- 8. Gibt es eine Möglichkeit, ein Controls.ContextMenu in ein Forms.ContextMenu zu konvertieren?
- 9. Gibt es eine Möglichkeit, ein Greasemonkey-Skript automatisch in ein Bookmarklet zu konvertieren?
- 10. Gibt es eine Möglichkeit, js-Datei oder eine Skript-Zeichenfolge in ein Objekt zu konvertieren?
- 11. Gibt es eine Möglichkeit, ein JSON-Schema in eine XSD zu konvertieren?
- 12. Gibt es in Javascript eine Möglichkeit, ein Objektarray in Parameter eines Funktionsaufrufs zu konvertieren?
- 13. gibt es eine Möglichkeit, ein Muster in .dockerignore zu negieren?
- 14. Gibt es eine Möglichkeit zu verhindern, Asciidoc eine Datei Linke in einen tatsächlichen Link zu konvertieren?
- 15. Gibt es eine Möglichkeit, einen SQL Server-Abfrageplan programmgesteuert in ein Abbild zu konvertieren?
- 16. Gibt es eine saubere Möglichkeit, ein C# -Parameterobjekt [] '-Konstruktorargument in einen C++ - Konstruktor zu konvertieren?
- 17. Gibt es eine sichere Möglichkeit, eine Sammlung in eine Sequenz in F # zu konvertieren?
- 18. ANTLR: Gibt es ein einfaches Beispiel?
- 19. Gibt es eine Möglichkeit, SqlBulkCopy zu verwenden, ohne die Daten in eine DataTable zu konvertieren?
- 20. Gibt es eine Möglichkeit zu testen, ob ein Edelstein funktioniert? Oder eine Möglichkeit zu sehen, welche Funktionen es hat
- 21. Gibt es eine Möglichkeit, eine JodaTime-Periode in eine Dezimalzahl von Stunden zu konvertieren?
- 22. Gibt es eine Möglichkeit, Datenbanktransaktionen zu beschleunigen?
- 23. Gibt es eine Möglichkeit, meine Konsolenanwendung in eine Windows Forms-Anwendung in C# zu konvertieren?
- 24. Gibt es eine Möglichkeit, Formularantwort zu ignorieren?
- 25. Gibt es eine Möglichkeit, django.db.connection.queries zu löschen?
- 26. Gibt es eine Möglichkeit, onPanResponderMove zu verwalten?
- 27. Gibt es eine Möglichkeit, Kovarianz zu deklarieren?
- 28. Gibt es eine Möglichkeit, AMDPlugin zu deaktivieren?
- 29. Gibt es eine Möglichkeit, Creeps zu löschen?
- 30. Gibt es eine Möglichkeit, ein Apache ANT-Ziel zu verallgemeinern?
Es sieht aus wie JSON.stringify ignoriert auch "Klasseneigenschaften" – Qrilka