2012-03-13 3 views
4

Я пытаюсь перебрать вычисляемый массив свойств в рулях. В этом примере я могу сделать это для обычного массива, но не для вычисленного массива: http://jsfiddle.net/gh7Qr/Можно ли закодировать вычисляемый массив в Emberjs?

Что должен иметь правильный синтаксис для вычисления вычисленного свойства в дескрипторах?

ответ

5

Да, это возможно. Но вы забыли return ваш вычисленный массив, и вы должны добавить cacheable() к вычисленным свойствам, которые возвращают объект, а не примитив. В противном случае вы столкнетесь с бесконечным циклом (см. Обсуждение https://github.com/emberjs/ember.js/issues/38). Также посмотрите на превосходный blog post Гордон Хемптон о текущих Ember.js gotchas, среди прочих, относительно вычисленных свойств. Однако после фиксации 626d23f проблема с кэшированием была решена.

Исправленный пример вашего кода здесь: http://jsfiddle.net/gh7Qr/4/

Рули:

<script type="text/x-handlebars" > 
    {{#each App.games}} 
     {{this}} 
    {{/each}} 
    {{#each App.gamesA}} 
     {{this}} 
    {{/each}} 
</script> 

JavaScript:

App = Ember.Application.create({ 
    games: [1, 2, 3], 
    gamesA: Em.computed(function() { 
     return this.get('games').map(function(game) { 
      return game + 'a'; 
     }) 
    }).property('games').cacheable() 
});​ 

+0

Спасибо! Я переводил с coffeescript и забыл о возвращении. Кэшируемость - это то, что меня достало –

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