オブジェクトのEmber.jsプロパティを取得する手段が見つからないため、このような変換作業を行う方法が見つかりませんでした。 Ember.keys
は、create
に設定したプロパティまたはget
で設定したプロパティのみを返し、Ember.extend
で宣言されたプロパティは表示されません。Emberオブジェクトをプレーンなjavascriptオブジェクトに変換する方法はありますか?
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;
}
});
それはクラス階層まで行かないと見ていません:私は、私は次のコードでそれを解決するため現時点ではデフォルト値(配列プロパティ用など[]
)
JSON.stringifyも "クラスのプロパティ"を無視しているようです – Qrilka