【问题标题】:Emberjs, each block helper advancedEmberjs,每个块助手高级
【发布时间】:2014-07-05 13:14:32
【问题描述】:

这是我的平面模型:

 [
    { id: 1, title: '', body: '' },
    { id: 2, title: '', body: '' },
    { id: 3, title: '', body: '' },
    { id: 4, title: '', body: '' },
    // ...
 ]

这是我期望的模板:

  <div class="row">
    <div class="col-md-4 col-md-offset-2">
      <h6>{{! item1 title }}</h6>
      <p>{{! item1 body}}</p>
    </div>
    <div class="col-md-4 col-md-offset-1">
      <h6>{{! item2 title}}</h6>
      <p>{{! item2 body}}</p>
    </div>
  </div>
  <div class="row">
    <div class="col-md-4 col-md-offset-2">
      <h6>{{! item3 title }}</h6>
      <p>{{! item3 body}}</p>
    </div>
    <div class="col-md-4 col-md-offset-1">
      <h6>{{! item4 title}}</h6>
      <p>{{! item4 body}}</p>
    </div>
  </div>
  <!-- ... -->

ember 方法是什么?

一个简单的 each 助手不会有帮助,因为模板结合了模型中的两个元素。

我应该更改我的模型、自定义数组控制器、构建组件、编写模板助手,还是有针对这个简单问题的内置解决方案?

【问题讨论】:

  • 您可能需要一个阵列控制器。看看emberjs.com/api/classes/Ember.ArrayController.html
  • 数组控制器对我没有帮助,这每个循环都有一个转折,如果您查看预期的模板,它会在一次迭代中将两个项目分组。

标签: javascript ruby-on-rails ember.js template-engine handlebars.js


【解决方案1】:

你应该改变你的数据结构。我仍然会使用 ArrayController,但同时我会在其上添加一个计算属性,将所有内容分组(我猜你的模式是其他的)。

App.FooController = Em.ArrayController.extend({
  groupedItems: function(){
    var groups = [],
        group,
        model = this.get('model'),
        len = this.get('length');
    for(var i = 0;i<len;i++){
      if(i%2==0){
        group = [];
        groups.push(group);
      }
      group.push(model[i]);
    }
    return groups;
  }.property('model.[]')
});

{{#each item in groupedItems}}
  <div class="row">
    <div class="col-md-4 col-md-offset-2">
      <h6>{{ item.firstObject.title }}</h6>
      <p>{{ item.firstObject.body}}</p>
    </div>
    <div class="col-md-4 col-md-offset-1">
      <h6>{{item.lastObject.title}}</h6>
      <p>{{item.lastObject.body}}</p>
    </div>
  </div>
{{/each}} 

老实说,有很多方法可以对它们进行分组,我想说的是分组是最简单的。

【讨论】:

  • 这是什么'model.[]' 我不能只说model
  • 搜索分组我发现了这个类似的问题stackoverflow.com/questions/11491092/…
  • 哦,是的,同样的概念。不,你不能只说模型,如果你这样做了,它只会在数组本身被替换时更新,而不是在数组中添加/删除项目时更新(如果这永远不会发生,并且模型永远不会去要被替换,在计算属性依赖项中放置任何一个都可能没有意义)。
猜你喜欢
  • 2013-01-30
  • 2016-10-14
  • 2013-07-21
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
相关资源
最近更新 更多