Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在余烬中拆分和分组项目集合_Javascript_Ember.js_Ember Cli - Fatal编程技术网

Javascript 在余烬中拆分和分组项目集合

Javascript 在余烬中拆分和分组项目集合,javascript,ember.js,ember-cli,Javascript,Ember.js,Ember Cli,我试图在余烬中收集一组记录,并将它们分成若干组,比如2组 比如说 {{#each node in model}} <span>node.name</span> {{/each}} {{{#模型中的每个节点} node.name {{/每个}} 我得到了另一件事还有另一件事 我希望能够将节点传递给某个对象,并用div包装每2个节点 类似于thingother thingsome thingone more thingone things 在Ember 2.0中,大多

我试图在余烬中收集一组记录,并将它们分成若干组,比如2组

比如说

{{#each node in model}}
  <span>node.name</span>
{{/each}}
{{{#模型中的每个节点}
node.name
{{/每个}}
我得到了另一件事还有另一件事

我希望能够将节点传递给某个对象,并用div包装每2个节点 类似于
thingother thingsome thingone more thingone things


在Ember 2.0中,大多数东西都应该是一个组件,在那里是处理此逻辑的最佳位置。它应该是一个组件还是控制器?

考虑到与显示或其准备工作相关的内容属于该组件的原则,我更喜欢该组件。你可以这样做:

partitions: computedPartition('model', 2)
然后在模板中

{{#each partition in partitions}}
  <div>
    {{#each node in partition}}
      {{node.name}}
    {{/each}}
  </div>
{{/each}}
分区有不同的算法。看见下面是一个简短的递归示例:

function partition(array, n) {
  array = array.slice();
  return function _partition() {
    return array.length ? [array.splice(0, n)].concat(_partition()) : [];
  }();
}
深入 我们可以通过引入一个名为
computedArrayInvoke
的更高级别的计算属性来简化(?)上述内容,该属性使用指定的键以及其他参数调用数组值属性上的指定函数:

function computedArrayInvoke(fn, dependentKey, ...args) {
  return Ember.computed(dependentKey + ".@each", function() {
    return fn(this.get(dependentKey), ...args);
  });
}
现在我们可以写作了

partitions: computedArrayInvoke(partition, 'model', 2)

考虑到与显示或其准备工作相关的内容属于组件的原则,我更喜欢组件。你可以这样做:

partitions: computedPartition('model', 2)
然后在模板中

{{#each partition in partitions}}
  <div>
    {{#each node in partition}}
      {{node.name}}
    {{/each}}
  </div>
{{/each}}
分区有不同的算法。看见下面是一个简短的递归示例:

function partition(array, n) {
  array = array.slice();
  return function _partition() {
    return array.length ? [array.splice(0, n)].concat(_partition()) : [];
  }();
}
深入 我们可以通过引入一个名为
computedArrayInvoke
的更高级别的计算属性来简化(?)上述内容,该属性使用指定的键以及其他参数调用数组值属性上的指定函数:

function computedArrayInvoke(fn, dependentKey, ...args) {
  return Ember.computed(dependentKey + ".@each", function() {
    return fn(this.get(dependentKey), ...args);
  });
}
现在我们可以写作了

partitions: computedArrayInvoke(partition, 'model', 2)