2012-07-12 79 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