emberjs拆分承诺数组

时间:2014-07-28 02:34:44

标签: javascript ember.js ember-data

我正在尝试将一个余烬商店记录拆分为3列以供显示。我试图在控制器动作中执行此操作,但由于承诺的填充方式,我感觉这是错误的。

我希望我的数据看起来如何(车把友好)。

var events = [
  {column: ['work1','work2','work3']}, 
  {column: ['priv1','priv2','priv3']}, 
  {column: ['mail1','mail2','mail3']}
];

以下是我正在运行的代码。当我尝试将事件安排到另一个对象时,不会存储任何数据。

//app/controllers/index.js
import Ember from 'ember';

export default Ember.Controller.extend({
    columns: function(){
        var events = this.store.find('event');
        var columns = [[],[],[]];
        var count = 0;
        events.forEach(function(item, index, enumerable){
            columns[count].push(item);
            count++;
            if (count === 4){
              count = 0;
            }
        });
        columns = [{column: columns[0]}, {column: columns[1]}, {column: columns[2]}];
        return columns;
    }.property()
});

//app/templates/index.hbs
<div class="row">
  {{#each 'columns'}}
    <div class="col-lg-4">
      {{#each 'column'}}
        {{this}}
      {{/each}}
    </div>
  {{/each}}
</div>

1 个答案:

答案 0 :(得分:1)

find会返回一个承诺,因此您需要等待它解决才能使用它。此外,您应该使用pushObject,以便Ember知道您已向阵列添加了新项目。

export default Ember.Controller.extend({
    columns:[[],[],[]],
    setupColumns: function(){
        var eventsPromise = this.store.find('event'),
            columns = [[],[],[]],
            count = 0,
            self = this;
        eventsPromise.then(function(events){
          events.forEach(function(item, index, enumerable){
            columns[count].pushObject(item);
            count++;
            if (count === 4){
              count = 0;
            }
          });
          self.set('columns', [{column: columns[0]}, {column: columns[1]}, {column: columns[2]}]);
        });
    }.on('init')
});

老实说,你应该在控制器之前解决模型(在路线中),这会使这变得更加容易。