2014-12-06 4 views
0

Я уверен, что есть простой способ решить этот основной вопрос, но, честно говоря, я не могу найти его на Emberjs.com или в Stackoverflow (возможно, я задаю неправильный вопрос).Создайте массив Ember.Object

Я использую библиотеку amChart для сбора данных. amChart требует, чтобы я передавал «стандартный» массив объектов. Поэтому я попытался преобразовать свой объект Ember.object в массив с помощью метода toArray(). Но я понимаю, что теперь, когда метод 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(), 

Если кто-то имеет более эффективный/лучший способ Ember подойти к этому, я с радостью изменит это решение.

+0

Получил скрипку с примером того, что выглядит как ваши данные? – givanse

ответ

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')' чище. –

+1

Вы имеете в виду ** без ** использования 'get()'? –

+0

Да, я исправил это. Спасибо что подметил это. – GJK

Смежные вопросы