我正在尝试将一个余烬商店记录拆分为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>
答案 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')
});
老实说,你应该在控制器之前解决模型(在路线中),这会使这变得更加容易。