2014-12-06 37 views
0

我確定這個基本問題有一個簡單的解決方案,但坦率地說,我無法在Emberjs.com和Stackoverflow上找到它(也許我問錯了問題)。創建一個Ember.Object的數組

我正在使用amChart庫來繪製圖表數據。 amChart要求我傳遞一個「標準」對象數組。所以我嘗試使用toArray()方法將我的Ember.object轉換爲數組。但我明白,現在toArray()方法創建一個Ember.objects數組,結果amChart找不到我在amChart中映射的屬性。

換句話說,我需要一個數組,其屬性可以通過常規javascript語法(array [1] .attribute)而不是'object.get('attribute')'訪問。

或者我應該採取另一種方法呢?

UPDATE

從下面我的結論是,我需要創造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(), 

如果任何人有一個更有效的/更好的灰燼方式來處理這個問題,我很樂意修改這個解決方案。

+0

得到與你的數據看起來像一個例子的小提琴? – givanse 2014-12-06 14:57:30

回答

2

我會說你有兩個選擇:

  1. 避免在灰燼對象使用計算性能,爲正常屬性可以不使用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(); 
    }); 
    
+0

'return this.getProperties('prop1','prop2')'更清潔。 – 2014-12-06 18:36:12

+1

你的意思是**沒有**使用'get()'? – 2014-12-06 18:37:49

+0

是的,我修正了這個問題。感謝您指出了這一點。 – GJK 2014-12-06 19:59:25