2

我正在使用车把助手来计算数组中有多少行。如果它高于 2,则返回 true,并且它可以按预期工作。看起来像这样:

define('templates/helpers/countRows', ['handlebars'], function ( Handlebars ) {
    function countRows(selectedArray) {
        var selectedArrayLength = selectedArray.length;
        if (parseInt(selectedArrayLength) > 2) {
            return true;
        }
    }
    Handlebars.registerHelper('countRows', countRows);
    return countRows;
});

问题是我想在我的 hbs 模板中设置一个条件,以在输出之前检查该值是否为真。如果不是真的,我不希望它输出。我希望我能做这样的事情:

{{#if countRows "my array"}}
    markup that only gets displayed if value is true
{{/if}}

但不幸的是,这无效..

4

1 回答 1

6

最好的方法是在控制器上定义计算属性来处理这种类型的逻辑。

App.ThingsController = Ember.ArrayController.extend({
  enoughRows: Ember.computed.gte('content.length', 2)
});

然后在您的模板中:

{{#if enoughRows}}
  ...
{{/if}}

将这样的逻辑嵌入到模板中很难调试和测试。遵循这一理念,车把很难在真/假之外进行条件检查。

如果您需要在许多控制器中重复这种逻辑,请考虑制作一个 mixin。

App.EnoughRowsMixin = Ember.Mixin.create({
  enoughRows: Ember.computed.gte('content.length', 2)
});
于 2013-10-09T15:49:27.530 回答