2016-04-08 30 views
4

有沒有辦法在{{#if}}語句中執行邏輯運算? 我希望這樣的事情:Blaze:{{#if}}語句中的邏輯(不,或,和...)

{{#if A && B}} 
    some html 
{{/if}} 

我找不到任何有關在大火邏輯文件,所以我想這是不支持的。我只是想確定。對不起,這個相當愚蠢的問題...

回答

11

正如比利·鮑伯·指出,你需要參數化的幫助器。以下是你可以在任何情況下使用兩個全球助手:

Template.registerHelper('and',(a,b)=>{ 
    return a && b; 
}); 
Template.registerHelper('or',(a,b)=>{ 
    return a || b; 
}); 

然後你可以用用這些:

{{#if and a b}} 
    a and b are both true-ish 
{{/if}} 
{{#if or a b}} 
    a or b is true-ish 
{{/if}} 
+0

這是一個好主意 –

2

Spacebars旨在避免包括HTML中的邏輯操作。但這並不意味着你不能擁有一個:你需要使用助手。基本上,你有2個條件的情況下:

  • 簡單{{#if something}}和它的孿生{{#unless something}}(把它理解爲「如果不是」)。這是你想要的,和你的助手會是什麼樣子,你用你的something輔助參數,這種

    Meteor.yourTemplate.helpers({ 
        something : function() { 
        return A && B 
        } 
    }); 
    
  • 更復雜{{#if something 'value'}}

    Meteor.yourTemplate.helpers({ 
        something : function (value) { 
         if (value === true){ 
         return true 
         } else { 
         return false 
         } 
        }); 
    
1

這裏是我的版本:

Template.registerHelper("and", function() { 
    return Array.prototype.slice.call(arguments, 0, -1).filter(arg => arg == true).length == arguments.length - 1; 
}); 

Template.registerHelper("or", function() { 
    return Array.prototype.slice.call(arguments, 0, -1).filter(arg => arg == true).length > 0; 
}); 

現在,您可以用x參數來檢查,如:

{{#if and check_1 check_2 check3}} 

您會注意到切片(0,-1),Blaze將更多參數添加到該函數中。