2014-11-04 26 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