【问题标题】:Ember, wrap cols in rows with handlebars {{#each}}Ember,用把手 {{#each}} 将列包装成行
【发布时间】:2015-03-09 04:28:36
【问题描述】:

我使用车把 {{#each}} 我需要改变它:

<div class="col-lg-4">{{somevalue}}</div>
<div class="col-lg-4">{{somevalue}}</div>
<div class="col-lg-4">{{somevalue}}</div>
<div class="col-lg-4">{{somevalue}}</div>
<div class="col-lg-4">{{somevalue}}</div>
<div class="col-lg-4">{{somevalue}}</div>
<div class="col-lg-4">{{somevalue}}</div>
<div class="col-lg-4">{{somevalue}}</div>

进入这个:

<div class="row">
<div class="col-lg-4">{{somevalue}}</div>
<div class="col-lg-4">{{somevalue}}</div>
<div class="col-lg-4">{{somevalue}}</div>
</div>
<div class="row">
<div class="col-lg-4">{{somevalue}}</div>
<div class="col-lg-4">{{somevalue}}</div>
<div class="col-lg-4">{{somevalue}}</div>
</div>
<div class="row">
<div class="col-lg-4">{{somevalue}}</div>
<div class="col-lg-4">{{somevalue}}</div>
</div>

我注册了车把助手:

Handlebars.registerHelper('isFourthOpen', function (index, opts) {
    if ((index + 1) % 3 == 1)
        return opts.fn(this);
    else
        return opts.inverse(this);
});

Handlebars.registerHelper('isFourthClose', function (index, opts) {
    if ((index + 1) % 3 == 0)
        return opts.fn(this);
    else
        return opts.inverse(this);
});

如何将当前索引传递给这个助手? 我尝试这样做:

 {{#isFourthOpen _view.contentIndex}}

但是当我在检查器中查看变量“index”时,我只看到“_view.contentIndex”作为字符串,而不是值。

如果有人有更简单的方法来做到这一点,请告诉我。

灰烬 1.9.1 车把 2.0.0

【问题讨论】:

    标签: ember.js handlebars.js client-side-templating


    【解决方案1】:

    我认为最好将数据分组并使用 2 个{{#each}} 块。

    试试这样的:

    模板:

    {{#each group in groupedItems}}
      <ul>
        {{#each item in group}}
          <li>{{item}}</li>
        {{/each}}
      </ul>
    {{/each}}
    

    控制器:

    App.IndexController = Ember.Controller.extend({
      groupSize: 3,
      groupedItems: Ember.computed('items.[]', function() {
        var items = this.get('model');
        var grouped = [];
        var groupSize = this.get('groupSize');
    
        items.forEach(function(item, index) {
          if (index % groupSize === 0) grouped.pushObject([]);
          grouped.get('lastObject').pushObject(item);
        });
    
        return grouped;
      })
    });
    

    这是一个完整的工作示例,使用自定义计算属性宏:http://emberjs.jsbin.com/rapugivavi/3/edit?html,js,output

    更新

    此示例包含与原始问题更相似的操作和标记。

    模板:index
    {{#each group in groupedItems}}
      <div class="row">
        {{#each item in group}}
          {{render 'post' item}}
        {{/each}}
      </div>
    {{/each}}
    
    模板:post
    <div {{bind-attr class=":item isEditing"}}>
      {{model}}
    
      <div class="actions">
        {{#if isEditing}}
          <a {{action "doneEditing"}}>Done</a>
        {{else}}
          <a {{action "edit"}}>Edit</a>
        {{/if}}
      </div>
    </div>
    

    【讨论】:

    • 您能说得更具体些吗?什么坏了?
    • 本例中的模型 - 从商店中选择。在 {{#each}} 块中,我使用一些操作来处理模型项。如果我在控制器级别创建组,操作将不起作用。
    • 我不明白。你能用一个不起作用的例子制作一个 jsbin 吗?
    • jsbin.com/juguni/2/edit?html,js,output 这不起作用,但我希望它能解释我在说什么操作
    • 嗯,我在那里没有看到任何 JavaScript。你保存快照了吗?另请注意,emberjs.jsbin.com 是一个很好的起点
    猜你喜欢
    • 1970-01-01
    • 2012-09-04
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 2023-03-21
    • 2014-06-30
    • 1970-01-01
    相关资源
    最近更新 更多