non riuscivo a trovare un modo per realizzare il compito di tale conversione come non ho potuto trovare alcun mezzo di recupero delle proprietà Ember.js per l'oggetto. Ember.keys
restituisce solo le proprietà ho impostato in create
o con get
e le proprietà dichiarate in Ember.extend
non mostrano lassù. Io uso tali proprietà per impostare i valori di default (ad esempio []
oggetti array)C'è un modo per convertire l'Oggetto Ember in un semplice oggetto javascript?
risposta
Al momento ho risolto con il seguente frammento:
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;
}
});
Non va la gerarchia delle classi e non sembra in mixins (come io uso per gli oggetti di dati che sono sotto forma abbastanza semplice che punto di vista)
vorrei fare qualcosa di simile alla persona di cui sopra, ma mi piacerebbe farlo un po 'diverso.
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);
}
});
oggetto
Poi basta necessità di attuare il App.NativeObject
mixin in oggetti che si desidera che il toNative
on:
var Object = Ember.Object.extend(App.NativeObject, {
name: 'Adam',
count: 4
});
Abbiamo poi avere lo toNative
metodo su tutti gli oggetti che implementano il nostro mixin.
obbligatorio jsFiddle: http://jsfiddle.net/jumUx/
la soluzione non è ricorsiva sebbene – Qrilka
È comunque un piccolo passo da ciò a renderlo ricorsivo. – Wildhoney
sì, ma dare un'occhiata a questa forcella del vostro violino - http://jsfiddle.net/C2Rdn/: se si crea una classe, "NativeObject" includerà le proprietà extra, come 'isDestroyed' ecc – Qrilka
Un'altra possibile soluzione che possa soddisfare le vostre esigenze, pur non essendo completamente ricorsiva per gli oggetti nidificati Ember:
// where myEmberObject is.. an ember object
var plainJavaScriptObject = myEmberObject.toJSON();
Ciò includerà solo le proprietà reali che hai definito e non Braci interni. Di nuovo, lo svantaggio qui è che tutti gli oggetti Ember nidificati non saranno convertiti, ma appariranno come stringhe in stile "".
Qui è la mia soluzione sporca
var newModel = JSON.parse(JSON.stringify(model));
nota: questo non include le funzioni – Jaime
Al giorno d'oggi si potrebbe semplicemente usare 'model.toJSON()'. –
Questo è quello che ho fatto e funziona abbastanza bene. Si noti, questo dovrebbe essere pronto solo, le eventuali modifiche apportate a un oggetto o un array in oggetto copiato influenzerà l'oggetto originale
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;
}
})
qualcosa di molto semplice che ha funzionato abbastanza correttamente per me è:
Ember.Object.reopen({
toJson: function() {
return JSON.parse(JSON.stringify(this));
}
});
al momento del caricamento dell'app.
- 1. Come posso convertire un oggetto TypeScript in un oggetto semplice?
- 2. modo semplice per convertire una stringa in un dizionario
- 3. Esiste un modo semplice per convertire i criteri in HQL?
- 4. c'è un modo semplice per convertire il mio oggetto XML in String in java?
- 5. C'è un modo semplice per convertire il testo in HTML in JavaScript?
- 6. jQuery/JavaScript: convertire i pixel in em in modo semplice
- 7. Esiste un modo semplice per convertire un timestamp ISO8601 in un NSDate formattato?
- 8. C'è un modo semplice per convertire il codice jquery in javascript?
- 9. Esiste un modo semplice per valutare JavaScript in WebStorm?
- 10. Un modo semplice per convertire il codice c nell'assemblaggio x86?
- 11. un modo per convertire Appengine datastore Entity nel mio oggetto?
- 12. Come convertire una stringa in un oggetto XML in JavaScript?
- 13. Modo più semplice per convertire il formato gg-mm-aaaa in mm-gg-aaaa in Javascript
- 14. C'è un modo semplice per convertire un booleano in un intero?
- 15. Il modo più semplice per convertire in booleano
- 16. Javascript: oggetto [metodo]() non funziona o come creare un plugin jQuery per un semplice codice Javascript
- 17. Iniettare un servizio in un oggetto Ember [non è un controller Ember]
- 18. Il modo più semplice per convertire un elenco in un set in Java
- 19. Il modo più semplice per convertire un URL in un collegamento ipertestuale in una stringa C#?
- 20. C'è un modo semplice per creare variabili dinamiche con Javascript?
- 21. Convertire oggetto JavaScript complesso per oggetto la notazione punto
- 22. Convertire un oggetto BaseClass in un oggetto SubClass in modo idiomatico?
- 23. come convertire un oggetto timedelta in un oggetto datetime
- 24. Convertire un time_t in un oggetto NSDate?
- 25. Un modo semplice per disabilitare un UITextField?
- 26. Un modo semplice per convertire un dizionario <stringa, stringa> in xml e viceversa
- 27. C'è un modo semplice per convertire il file .xls in un file .csv? (Excel)
- 28. Come posso convertire un oggetto JSONObject in un file gson.JsonObject?
- 29. C'è un modo semplice per usare InternalsVisibleToAttribute?
- 30. Esiste un modo per convertire un oggetto dinamico o anonimo in un oggetto dichiarato e fortemente digitato?
Sembra che JSON.stringify ignori anche le "proprietà di classe" – Qrilka