2014-11-04 23 views
5

有没有办法来缩短多个空格条件运算

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

只是一个单一的,如果?

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

以上两者似乎都不起作用。

+0

我发现我可以使用UI.registerHelper(),但是我不确定如何配置它以采取任何数量的争论。 (数组似乎没有工作,还没有尝试映射) – Sinistralis 2014-11-04 21:28:55

回答

7

Spacebars延续了Mustache和Handlebars为无逻辑模板语言的理念。这就是为什么简单的逻辑最好放置在控制器中而不是模板中的原因。

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

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

电话为:

您还可以了解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}} 
+0

我知道如何将变量传递到模板中,这种方法令我担忧的是它无法处理X参数。我需要许多不同的模板来执行基本相同的任务。能够定义我自己的助手感觉就像是正确的路线,但我不明白如何将变量传递到助手的工作方式,除非它具有只能处理单个变量的相同问题。 – Sinistralis 2014-11-04 21:38:43

+0

您能不能在lib文件夹中成功定义模板?如果不是,放置全局模板帮助器定义的最佳位置在哪里? – Sinistralis 2014-11-05 15:28:06

+1

我会把它们放在'/ client/lib'中。应该在那里定义“模板”。 – 2014-11-05 22:25:32

1

虽然在模板中,您可以使用这个对象来引用传入的参数,这可以避免在我需要它们的大多数情况下使用多个#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}} 

我只是在这个偶然的事故,但是这是一个巨大的发现对我来说。

+1

我相信[UI.registerHelper已被弃用](https://github.com/meteor/meteor/issues/3017)。请检查我更新的答案。 – 2014-11-04 23:15:09

+0

我尝试使用Template.registerHelper,并一直告诉我,模板是未定义的。这很奇怪。如果是这种情况,我需要弄清楚为什么它不适合我,并相应地更新。 – Sinistralis 2014-11-05 15:02:38

+0

已更新此信息以反映您的信息,因此我不会传播信息。尽管如此,请在我的回答中看到我的评论,因为在lib定义期间UI存在,但Template没有,我觉得像lib是我应该定义全局帮助者的地方。 – Sinistralis 2014-11-05 15:29:16