【问题标题】:Ember use separate child template filesEmber 使用单独的子模板文件
【发布时间】:2015-10-20 15:26:14
【问题描述】:

我有以下模板文件(实际用于我的组件)

{{#each details.secs as |sec|}}
    <div class="row">
    {{#each secs.flds as |fld|}}
        // if fld.id is 'abc', use abc.hbs
        // if fld.id is 'xyz', use xyz.hbs
    {{/each}}
    </div>
{{/each}}

我的问题是如何使用单独的子模板文件并将它们包含在上述父文件中(根据条件)

因此如果 field.id 是 'abc',它应该使用来自 abc.hbs 的渲染逻辑 abc.hbs 还需要“字段”模型输入来进行渲染(它的输出应该附加到主模板中)

【问题讨论】:

  • 看看{{component}} 助手。或者,只需编写一个{{if}} 语句,使用(eq field.id 'abc') 之类的条件。
  • 但是我如何拥有单独的子模板文件,并在这些子文件中写入逻辑
  • 另见{{partial}}

标签: javascript ember.js handlebars.js


【解决方案1】:

使用 Ember 2.0,创建和注册我们自己的 eq (equals) 助手非常简单:

ember generate helper eq

包括我们的相等函数:

// app/helpers/eq.js


import Ember from 'ember';

export function eq(params, hash) {
  return (params[0] === params[1]);
}

export default Ember.Helper.helper(eq);

并使用它!

{{#each details.sections as |section|}}
    <div class="row">
    {{#each section.fields as |field|}}
        {{#if (eq field.id "abc")}}
            {{abc-component data=field}}
        {{/if}}
        {{#if eq field.id "xyz)}}
            {{xyz-component data=field}}
        {{/if}}
    {{/each}}
    </div>
  {{/each}}

【讨论】:

  • 非常感谢...在生成的帮助器中,我已经看到了导出函数 eq(..) 所以我需要替换它吗?
  • 还有 const eq = (params) => params[0] === params[1];似乎是 ES6 ...你能提供 ES5 等价物吗?
  • @testndtv var eq = function(arr) { return arr[0] === arr[1]
  • Thx...我应该删除生成的导出函数 eq(params/*, hash*/) 吗?
  • 太棒了..非常感谢您的帮助。真的很感激:)
猜你喜欢
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多