我正在迭代一个项目列表:
{{#each myList as |myItem|}}
...do stuff...
{{/each}}
但我想抓住每4件物品。像这样:
{{#each myList as |item1 item2 item3 item4|}}
...do stuff...
{{/each}}
我试过这个,但它没有用。有没有办法抓住每一件X物品?如果是,解决方案是否可扩展?
答案 0 :(得分:1)
把手不直接支持此功能。我建议在某个对象上使用计算属性。在这里,我将model
称为数组,但它可以是任何内容:
setSize: 4,
modelSet: Ember.computed("model", () => {
let model= this.get('model');
let setSize= this.get('setSize');
let offset= 0;
let result= [];
while (offset < model.length) {
result.push(model.slice(offset, offset+setSize));
offset+= setSize;
}
return result;
}
现在,在模板中迭代时:
{{#each modelSet as |items|}}
{{item.0}} {{item.1}} ...etc...
{{/each}}
答案 1 :(得分:0)
如果分割的固定大小为4对你有好处,那么使用无标记组件很容易实现你想要的效果。请查看following twiddle。内部使用each-by-4
的{{1}}组件可以满足您的需求,因此它可以轻松地在您的应用程序中重复使用它。
然而;如果固定长度4不够好而你需要动态分裂长度(我的意思是有时3,其他时间是5,依此类推),如果不是不可能的话,很难达到你想要的效果。我的意思是:
each-helper
如果在动态分割大小方面,以下内容足够好;
{{#each myList as |item1 item2 item3 item4|}}
...do stuff...
{{/each}}
请查看我提供的同一个旋律中的{{#each-n list 4 as |subList|}}
{{subList.item1}} {{subList.item2}} {{subList.item3}} {{subList.item4}}
{{/each-n}}
组件。这种方法似乎更可重用;因为它允许任何尺寸分裂。我希望这会对你有所帮助。
答案 2 :(得分:0)
我将在这里添加我的答案,使用ember-loadash addon,安装运行以下命令,
ember install ember-lodash
要单独包含所需的数组函数,您可以像import _array from 'lodash/array';
您可以定义junkedList
计算属性,该属性取决于myList
。或者您可以使用_array.chunk
方法直接将其创建为junkedList。
import Ember from 'ember';
import _array from 'lodash/array';
export default Ember.Controller.extend({
chunkSpan: 4,
junkedList: Ember.computed('myList', function() {
return _array.chunk(this.get('myList').toArray(), this.get('chunkSpan'));
}),
});
迭代,
{{#each junkedList as |groupedItems|}}
{{#each groupedItems as |item|}}
//design using item
{{/each}}
{{/each}}
另一个选项,安装ember-composable-helper addon ember install ember-composable-helper
插件并使用chunk
帮助,
参考:https://github.com/DockYard/ember-composable-helpers#chunk
{{#each (chunk 4 junkedList) as |groupedItems|}}
{{#each groupedItems as |item|}}
//design using item
{{/each}}
{{/each}}
总是有多种方式,但选择权在你手中。