灰烬开关/索引等等

时间:2014-05-12 21:03:56

标签: ember.js

Ember在比较部门似乎相当缺乏。您只能使用#if帮助程序与零进行比较,并且人们编写的所有酷扩展帮助程序都不能与@index ...一起使用,因此您无法执行类似

的操作
{{#each}}
    {{#xif '@index == 3'}}
        ....
    {{/xif}}
{{/each}}

将提供专业化(对于@index == 3)。

有谁知道如何基本上做到这一点?我有一个循环,但我需要专注于某些索引。

理想情况下,switch语句会很好(可能会破解把手来添加它吗?)

e.g,

{{#each}}
    {{#switch @index}}
        {{case 0}}
            ....
        {{/case}}
        {{case 1}}
            ....
        {{/case}}
        {{default}}
            ....
        {{/default}}
    {{/switch}}
{{/each}}

等...

现在我不得不使用jquery专门化循环,这会导致不一致的体验。

3 个答案:

答案 0 :(得分:6)

在前面,我同意,比较一下是否真棒,但由于你在模板中放置了太多的逻辑,所以它的权力是对的。"

可以使用_view.contentIndex

访问索引

http://emberjs.jsbin.com/mugokaka/1/edit

切换只是if语句的语法糖,所以它仍然可以完成,但同样,它不是一个比较,只是简单,有点难看。

{{#if statementOne}}
   foo 1
{{else}}
  {{#if statementTwo}}
     foo 2
  {{else}}
    //yadda
  {{/if}}
{{/if}}

他们通常建议将逻辑放在控制器中,让它返回一个真实的声明。

答案 1 :(得分:2)

您现在可以使用else if链接其他块。虽然看到Kingpin2k的答案。

{{#if isAtWork}}
  Ship that code!
{{else if isReading}}
  You can finish War and Peace eventually...
{{/if}}

http://emberjs.com/blog/2015/02/07/ember-1-10-0-released.html#toc_chained-else-blocks

答案 2 :(得分:0)

Ember / Handlebars限制了模板中可用的逻辑,这是出于非常明确的哲学原因,符合其对许多事物的规定性方法。它认为模板不应该充斥着计算和其他类似业务的逻辑。

在模板中或者用任何语言编写开关的冲动,已经被认为是一种代码味道"。它通常表明代码中的某些内容未被正确分解/构造。您可能需要将控制器和/或视图分解为更细粒度的子类,或者只是将此开关/案例逻辑放入控制器或视图中,这样做会更好。更易于阅读和维护。你没有给出任何你想要使用开关/盒子的例子;如果你有,也许有人可以进一步评论处理它的好方法。