2015-05-22 51 views
4

在車把我已註冊了返回一個列表的輔助功能,例如:每一個幫助函數的結果?

function myHelper() { 
    return [ 
     'some val 1', 
     'some val 2', 
     'some val 3' 
    ] 
} 

我想調用該函數,並使用把手上的結果迭代,這樣的事情:

{{#each myHelper}} 
<li>{{this}}</li> 
{{/each}} 

但是這並不會調用我的函數,我認爲它正在尋找名爲myHelper的上下文中的變量而不是函數。

有沒有辦法做到這一點,或者我需要在頁面呈現之前將myHelper()的結果作爲變量添加到上下文中嗎?

我使用的節點,快速和handlebars-express

回答

1

在JavaScript函數對象,因此從理論上講,你可以這樣做(未測試)。

Handlebars.registerHelper('each', function(context, options) { 
 

 
    // Execute context if it's a function to get the array 
 
    if(typeof context == "function") 
 
    context = context(); 
 
    
 
    var ret; 
 
    
 
    for(var i=0, j=context.length; i<j; i++) { 
 
    ret += options.fn(context[i]); 
 
    } 
 

 
    return ret; 
 
});

在你的代碼

則...

function myHelper() { 
 
    return [ 
 
     'some val 1', 
 
     'some val 2', 
 
     'some val 3' 
 
    ] 
 
} 
 

 
var context = {myHelper: myHelper}; 
 
var html = template(context);

+0

很好的解決方案。當輔助函數在上下文中定義時,這似乎工作,但是當它被定義爲全局輔助函數時,傳遞的函數參數作爲未定義進來。 – antfx