2012-07-12 78 views
0

我正在使用Expressjs處理這個Web應用程序,我覺得需要微軟的Razor視圖引擎提供的功能。助手內呼叫助手

Razor允許從其他幫助者中調用助手。 在Expressjs中,助手的作用域在從視圖中調用時不會擴展到助手本身。

這是否有溶劑?我想不必將助手作爲參數傳遞給視圖,或者必須要求助手的文件。

在此先感謝

例子:

app.helpers({ TextBoxHelper: require('./TextBox.js') }); 
app.helpers({ CharCounter : require('./CharCounter.js' ) }); 
在我的服務器

。當我渲染視圖,我用jshtml視圖引擎,並調用一個幫手,我就必須做到以下幾點:

@TextBoxHelper() //I can do this because all helpers are present in this scope 

當助手被調用時,它退出的視圖範圍內,將會有不能訪問那裏的其他幫手。

現在,我希望這個助手「文本框」調用「CharCounter」。第二個助手應該是由其他幾個助手調用的,所以,如果我可以從助手的「.js」文件中調用它,而不需要腳本,或者將它作爲參數發送,那將是非常棒的。

+0

你能舉一個你想要做什麼的例子嗎?另外請注意,助手和dynamicHelpers在3.x中被刪除。 – Pickels 2012-07-12 11:56:09

+0

我在Pickels的問題底部添加了一個例子。當你說版本3.x時,你是指Express? o.O – 2012-07-13 08:42:28

+0

我的意思是Express.js 3.x.在新版本中你只有res.locals。因此,如果你想在3.x中使用助手,你可以爲全局幫助程序或'res.locals.myHelper = function(){}'特定的幫助程序執行'app.locals.myHelper = function(){}'。 – Pickels 2012-07-13 11:10:10

回答

0

我只是將所有的幫助器綁定到一個對象中。這樣你可以使用this.someHelper()

var helpers = { 
    first: function() { 
    console.log('first'); 
    helpers.second(); 
    }, 

    second: function() { 
    console.log('second'); 
    } 
}; 


helpers.first(); 

如果this是不是你希望它是你可以隨時輕易地改變它在Javascript什麼。

+0

那麼,從某種意義上說,這些助手已經全部捆綁在一起,並可供View Engine使用。問題是,如果我在某個特定時間在幫助者的內部工作,我無法訪問其他人。 當然,我可以將該助手對象作爲參數傳遞給我所調用的助手,並且它可以訪問它們。我只是想知道是否有更原生的做法。 – 2012-07-13 15:24:31