Nie mogłem znaleźć żadnego sposobu na wykonanie zadania takiej konwersji, ponieważ nie mogłem znaleźć żadnego sposobu na uzyskanie właściwości Ember.js dla obiektu. Ember.keys
zwraca tylko właściwości ustawione w create
lub get
, a właściwości zadeklarowane w Ember.extend
nie są tam wyświetlane. Używam takich właściwości, aby skonfigurować wartości domyślne (np []
dla właściwości tablicy)Czy istnieje sposób przekonwertowania obiektu Ember do zwykłego obiektu javascript?
Odpowiedz
W tej chwili mogę go rozwiązać z następującym fragmencie:
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;
}
});
nie idzie w górę hierarchii klasowej i nie wygląda na mixiny (jak używam dla obiektów danych, które są dość proste z tego punktu widzenia)
Zrobiłbym coś podobnego do osoby powyżej, ale zrobiłbym to trochę inaczej.
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);
}
});
Object
Potem wystarczy wdrożyć App.NativeObject
wstawek w swoich obiektach, które lubisz toNative
na:
var Object = Ember.Object.extend(App.NativeObject, {
name: 'Adam',
count: 4
});
Następnie mieć toNative
metoda na wszystkich obiektach, które implementują nasz mixin.
obowiązkowe jsFiddle: http://jsfiddle.net/jumUx/
, ale twoje rozwiązanie nie jest rekursywne. – Qrilka
Jest to jednak mały krok do tego, aby uczynić go rekursywnym. – Wildhoney
Tak, ale spójrz na ten widelec swojego skrzypka - http://jsfiddle.net/C2Rdn/: jeśli utworzysz klasę, "NativeObject" będzie zawierał dodatkowe właściwości, takie jak 'isDestroyed' itp. – Qrilka
Innym możliwym rozwiązaniem, które może w zależności od potrzeb, podczas gdy nie jest w pełni rekurencyjne dla obiektów zagnieżdżonych Ember:
// where myEmberObject is.. an ember object
var plainJavaScriptObject = myEmberObject.toJSON();
będzie to obejmować tylko rzeczywiste właściwości, które zostały zdefiniowane i nie Wewnętrzne embery. Ponownie, wadą jest to, że wszystkie zagnieżdżone obiekty Embera same nie będą konwertowane, ale pojawią się jako łańcuchy w stylu "".
Oto mój brudny obejście
var newModel = JSON.parse(JSON.stringify(model));
uwaga: nie obejmuje to funkcji – Jaime
W dzisiejszych czasach wystarczy użyć 'model.toJSON()'. –
To, co zrobiłem i działa całkiem dobrze. Uwaga, to powinno być tylko gotowe, a wszelkie zmiany przedmiotu lub tablicy w kopiowanego obiektu wpłynie oryginalnego obiektu
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;
}
})
coś całkiem proste, że pracował na tyle właściwie dla mnie jest:
Ember.Object.reopen({
toJson: function() {
return JSON.parse(JSON.stringify(this));
}
});
w czasie ładowania aplikacji.
- 1. nieskończonej pętli podczas przekształcania przedmiotu odcinania do zwykłego obiektu JavaScript
- 2. Obiekt DOM JavaScript do obiektu jQuery
- 3. Czy istnieje odpowiednik jQuery do kliknięcia obiektu obiektu Ruby?
- 4. Czy istnieje sposób na dodanie MouseListener do obiektu Graphic?
- 5. Czy istnieje sposób na wyeksportowanie obiektu ActiveRecord do pliku seeds.rb?
- 6. Czy istnieje sposób listy wszystkich powiązań do obiektu Ember.Object?
- 7. Czy istnieje sposób przekonwertowania pliku XML Cobertury do raportu HTML?
- 8. Konwersja złożonego obiektu JavaScript do dot notacji obiektu
- 9. Jak najlepiej konwertować ClientRect/DomRect do zwykłego obiektu
- 10. Dodaj obiekt JavaScript do obiektu JavaScript
- 11. Javascript - inicjator obiektu?
- 12. javascript: ustawienie właściwości obiektu
- 13. Jaki jest najbardziej efektywny sposób na opróżnienie zwykłego obiektu w javascript?
- 14. Cofnięcie JSON do obiektu JavaScript
- 15. Czy istnieje prosty sposób na uzyskanie rozmiaru obiektu java?
- 16. Czy istnieje sposób inicjowania obiektu Vue zachowującego początkowy kod HTML?
- 17. Czy istnieje sposób, aby usunąć cały obiekt z obiektu js
- 18. Typ JavaScript obiektu niestandardowego
- 19. Czy istnieje sposób na zainicjowanie obiektu za pomocą skrótu?
- 20. Czy istnieje sposób na uzyskanie domyślnego obiektu $ .ajax?
- 21. Czy istnieje sposób kompresowania obiektu lm() w celu późniejszego przewidywania?
- 22. Czy istnieje sposób automatycznego przekonwertowania skryptu Greasemonkey na skryptozakładkę?
- 23. Usuwanie pojedynczego obiektu z obiektu JavaScript
- 24. Get Ember Widok z obiektu jQuery
- 25. tworzenie tymczasowego obiektu nietrwałego w Ember-Data
- 26. JavaScript - Zalety literału obiektu
- 27. Wysyłanie tekstu/zwykłego jako złożonego obiektu w WebAPI z CORS
- 28. Czy istnieje unikalny identyfikator obiektu w Pythonie
- 29. JavaScript - budowa obiektu JSON
- 30. Usunięcie obiektów z obiektu javascript
Wygląda na to, że JSON.stringify ignoruje również "właściwości klasy" – Qrilka