我找不到任何方法来完成这种转换的任务,因为我找不到任何方法获取对象的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;
}
});
它不上去的类层次结构,不看到mixins中(因为我使用的数据对象非常简单,从这个角度来看)
我会做类似于上面的人的事情,但我会做一点不同的事情。
密新
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
混入,你会喜欢toNative
上:
var Object = Ember.Object.extend(App.NativeObject, {
name: 'Adam',
count: 4
});
然后我们有toNative
方法实现我们的混合的所有对象。
强制性的jsfiddle:http://jsfiddle.net/jumUx/
可满足您的需求,而不是嵌套灰烬对象完全递归的另一种可能的解决方案:
// where myEmberObject is.. an ember object
var plainJavaScriptObject = myEmberObject.toJSON();
这将只包含您定义和实际性能没有灰烬内部。同样,这里的缺点是任何嵌套的Ember对象本身都不会被转换,而是会以“”形式显示为字符串。
这里是我的脏解决办法
var newModel = JSON.parse(JSON.stringify(model));
注意:这不包括函数 – Jaime 2014-03-18 00:38:57
现在你可以使用'model.toJSON()'。 – 2018-01-29 15:20:44
这是我做的,它工作得很好。请注意,这应该只是准备好了,在复制对象的对象或阵列中的任何改变会影响到原始对象
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.Object.reopen({
toJson: function() {
return JSON.parse(JSON.stringify(this));
}
});
在应用加载时。
- 1. 什么是将DataTable转换为对象的最有效方法[,]?
- 2. 对象没有方法Javascript
- 3. JavaScript对象没有方法
- 4. 为什么数组中的对象没有对象方法?
- 5. 将javascript对象转换为json对象
- 6. 为什么Javascript对象没有改变?
- 7. 有没有什么方法可以将秒转换为Java 8中的LocalDateTime或ZonedDateTime对象
- 8. 将对象[]转换为另一个对象[],有可能吗?
- 9. 有没有办法将文本表格转换为PowerShell对象
- 10. 无法将javascript对象转换为json
- 11. 为什么NumPy将对象转换为浮动对象?
- 12. 为什么要比较null时将对象转换为对象?
- 13. 将AngularFire的firebaseListObservable对象转换为纯文本对象
- 14. Javascript:将对象的对象转换为对象数组
- 15. 将PHP数组转换为Javascript对象console.log后没有数组
- 16. 将方法转换为对象c#
- 17. 将Javascript对象转换成jquery对象?
- 18. 为什么不将JavaScript中的对象转换为JSON并返回该对象?
- 19. 将JSONObject转换为域对象的最佳方法是什么?
- 20. 我可以将Microsoft.Office.Interop.Excel.Chart对象转换为Microsoft.Office.Tools.Excel.Chart对象吗?
- 21. 我可以将Stream对象转换为FileInfo对象吗?
- 22. 我可以将JSON对象转换为JAXB对象吗?
- 23. 有什么方法可以将元数据添加到JavaScript对象吗?
- 24. Javascript对象没有方法错误
- 25. JavaScript错误 - 对象没有方法
- 26. 对象没有方法'替换'
- 27. 有没有什么方法可以用换行符将纯文本转换为HTML?
- 28. 将对象数组转换为对象的最佳方法?
- 29. 对象没有方法'ajaxLoader'
- 30. 有没有办法将键/值对列表转换为数据传输对象
它看起来像JSON.stringify也忽略“类属性” – Qrilka 2013-02-21 11:58:27