オブジェクトのEmber.jsプロパティを取得する手段が見つからなかったため、このような変換のタスクを実行する方法が見つかりませんでした。私が設定した、またはEmber.keys
設定したプロパティのみを返し、で宣言されたプロパティはそこに表示されません。このようなプロパティを使用してデフォルト値を設定します(配列プロパティなど)create
get
Ember.extend
[]
9 に答える
私は上の人と似たようなことをしますが、少し違ったやり方をします。
混入します
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);
}
});
物体
App.NativeObject
次に、必要なオブジェクトに mixinを実装する必要がありますtoNative
。
var Object = Ember.Object.extend(App.NativeObject, {
name: 'Adam',
count: 4
});
次にtoNative
、ミックスインを実装するすべてのオブジェクトのメソッドを取得します。
必須の jsFiddle: http://jsfiddle.net/jumUx/
これは私のために働いた:
myModel.toJSON({includeId: true})
Ember3を使用しています。
現時点では、次のスニペットで解決しています。
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;
}
});
クラス階層を上がらず、ミックスインを調べません(その観点から非常に単純なデータオブジェクトに使用するため)
これは私がやったことであり、非常にうまく機能します。コピーされたオブジェクトのオブジェクトまたは配列への変更は元のオブジェクトに影響するため、これは準備ができている必要があります。
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;
}
})
ネストされた Ember オブジェクトに対して完全に再帰的ではないものの、ニーズに合う可能性のある別の解決策:
// where myEmberObject is.. an ember object
var plainJavaScriptObject = myEmberObject.toJSON();
これには、定義した実際のプロパティのみが含まれ、Ember 内部は含まれません。繰り返しになりますが、ここでの欠点は、ネストされた Ember オブジェクト自体は変換されず、"" のスタイルの文字列として表示されることです。