2013-01-05 60 views
1

通過客戶端mustache.js template engine實現以下演示的最簡單方法是什麼?mustache.js模板引擎中的演示邏輯

var view = { 
    search_term: 'something', 
    number_of_hits: 3, 
    hits: [...] 
}; 

如果number_of_hits == 0然後打印在屏幕上:

如果number_of_hits == 1 「未找到結果」,則在屏幕上打印:

如果number_of_hits> 1,則 「找到一個結果」在屏幕上打印:「找到的結果」

瞭解小鬍子是無邏輯的模板引擎,是否可以用現有的小鬍子標籤或I將不得不改變JSON響應?

回答

1

有了鬍子有可能使用{{#section}}{{^inverted}}標籤的價值0和非0值來區分:

<!-- If number_of_hits is not 0, show hits --> 
{{#number_of_hits}} 
{{number_of_hits}} hits 
{{/number_of_hits}} 

<!-- If number of hits is 0 (or any other falsy value) --> 
{{^number_of_hits}} 
    No hits 
{{/number_of_hits}} 

據我所知,鬍鬚無法檢測1和2之間的差異,因爲實例。爲此,您必須修改您傳遞到模板中的view對象。也許是這樣的:

var hits = 3; 
var view = { 
    search_term: 'something', 
    number_of_hits: hits, 
    hitkind: { 
    none: hits === 0, 
    one: hits === 1, 
    many: hits > 1 
    } 
}; 

而且在模板

{{#hitkind.none}} No hits {{/hitkind.none}} 
{{#hitkind.one }} One hit {{/hitkind.one}} 
{{#hitkind.many}} {{number_of_hits}} hits {{/hitkind.many}} 

或者你可以考慮改變你的模板引擎Handlebars.js。把手是鬍鬚的超集,這意味着你所有的鬍鬚模板都可以使用它。 Handlebars模板就像Mustache's一樣無邏輯,所以它不會讓您直接將邏輯寫入模板。相反,它提供了Helpers的概念,或可從您的模板中調用的函數。

隨着車把你可以定義一個幫手,如:

Handlebars.registerHelper('hitCount', function(count) { 
    if(count === 0) return "No hits"; 
    if(count === 1) return "One hit"; 
    return count + " hits". 
}); 

而且從模板調用它:

{{hitCount number_of_hits}} 
+0

謝謝您的回答。我幾乎肯定鬍鬚不支持這種表現邏輯。感謝Handlebars的介紹。我一定會檢查出來。 –