多个空格键条件运算符

时间:2014-11-04 21:17:17

标签: meteor meteor-blaze spacebars

有没有办法缩短

{{#if arg1}}
    {{#if arg2}}
        //stuff
    {{/if}}
{{/if}}

只有一个if?

{{#if arg1 arg2}}
{{#if arg1 && arg2}}

上述两种情况似乎都不起作用。

2 个答案:

答案 0 :(得分:7)

Spacebars继续将Mustache和Handlebars作为无逻辑模板语言的理念。这就是为什么即使是简单的逻辑也最好放在控制器而不是模板中。

但是,您可以define a custom block helper执行逻辑and

<template name="ifand">
  {{#if arg1}}
    {{#if arg2}}
      {{> Template.contentBlock}}
    {{else}}
      {{> Template.elseBlock}}
    {{/if}}
  {{else}}
    {{> Template.elseBlock}}
  {{/if}}
</template>

请致电:

{{#ifand arg1="foo" arg2="bar"}}
  // stuff
{{/ifand}}

您还可以学习more about passing variables into templates

对于一般情况(and在任意数量的参数中),您将要注册一个全局模板助手:

Template.registerHelper('and', function () {
  var args = Array.prototype.slice.call(arguments, 0, -1);  // exclude key=value args
  var parameters = arguments[arguments.length - 1];  // key: value arguments

  return _.every(args, function (arg) {
    return !!arg;
  });

});

请致电:

{{#if and 1 "foo" 3 'bar' param="test"}}
  True
{{else}}
  False
{{/if}}

答案 1 :(得分:1)

在模板中,您可以使用 this 对象来引用传入的参数,这样我就可以避免在我需要的大多数情况下使用多个#if争论。

Template.myTemplate.created = function() {
    if(this.data.arg1 && this.data.arg2) {
        //do JS setup here
    }
}

此外,可以使用

指定帮助程序
Template.registerHelper('exists', function() {
    if(this.data.arg1 && this.data.arg2) {
        return true
    }
}

并执行上述帮助

{{#if exists}}
    //stuff
{{/if}}

{{> myTemplate arg1 arg2}}

我偶然偶然发现了这件事,但对我来说这是一个巨大的发现。