我确信这个基本问题有一个简单的解决方案,但坦率地说,我无法在Emberjs.com上找到它,也无法在Stackoverflow上找到它(也许我会问错误的问题)。
我正在使用amChart库来绘制数据图表。 amChart要求我传递一个“标准”对象数组。所以我尝试使用toArray()方法将我的Ember.object转换为数组。但我明白,现在toArray()方法创建了一个Ember.objects数组,其结果是amChart无法找到我在amChart中映射的属性。
换句话说,我需要一个数组,通过传统的javascript语法(array [1] .attribute)而不是'object.get('attribute')'来访问属性。
或许我应该采取另一种方法来解决这个问题?
更新
从下面的答案我得出结论,我需要为amChart创建一个新数组:
chartData: function() {
var statVals = this.get('chapters.statVals');
var statArray= statVals.toArray();
var amCharts = [];
var chartData = [];
for (var i = 0; i < statArray.length; i++) {
chartData.push({
time: statArray[i].get('time'),
value: statArray[i].get('value'),
});
}
return chartData;
}.property(),
如果有人有更高效/更好的Ember方法来解决这个问题,我很乐意修改这个解决方案。
答案 0 :(得分:2)
我想说你有两个选择:
get()
(Example)的情况下访问常规属性。这应该像传递普通的JS对象(Ember对象是真正意义上的)一样工作。在对象上创建一个toJsObject()
(或类似的),将它们转换为普通的JS对象,计算属性等等。例如:
var Widget = Ember.Object.extend({
toJsObject: function() {
return {
prop1: this.get('prop1'),
prop2: this.get('prop2')
};
}
});
// ...
var normalObjects = emberObjects.toArray().map(function(obj) {
return obj.toJsObject();
});