创建一个Ember.Object数组

时间:2014-12-06 14:47:38

标签: ember.js amcharts

我确信这个基本问题有一个简单的解决方案,但坦率地说,我无法在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方法来解决这个问题,我很乐意修改这个解决方案。

1 个答案:

答案 0 :(得分:2)

我想说你有两个选择:

  1. 避免在Ember对象中使用计算属性,因为可以在不使用get()Example)的情况下访问常规属性。这应该像传递普通的JS对象(Ember对象是真正意义上的)一样工作。
  2. 在对象上创建一个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();
    });