【问题标题】:Call helpers from within helpers从助手内部调用助手
【发布时间】:2025-12-21 15:25:07
【问题描述】:

我正在使用 Expressjs 开发这个 Web 应用程序,我觉得需要 Microsoft 的 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

当助手被调用时,它会退出视图范围,并且将无法访问那里的其他助手。

现在,我希望这个助手“TextBox”调用“CharCounter”。第二个助手应该由其他几个助手调用,所以,如果我可以从助手的“.js”文件中调用它,而不需要脚本,或者将它作为参数发送,那就太好了。

【问题讨论】:

  • 您能举个例子说明您正在尝试做什么吗?另请注意,助手和 dynamicHelpers 在 3.x 中已被删除。
  • 我在问题底部添加了一个示例 Pickels。当您说版本 3.x 时,您指的是 Express 吗? o.O
  • 我的意思是 Express.js 3.x。在新版本中,您只有 res.locals。因此,如果您想要 3.x 中的助手,您只需为全局助手执行 app.locals.myHelper = function () { }res.locals.myHelper = function () { } 路由特定助手。

标签: node.js helper express


【解决方案1】:

我只是将所有助手捆绑到一个对象中。这样你就可以使用this.someHelper()

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

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


helpers.first();

如果 this 不是您想要的,您可以随时在 Javascript 中轻松更改它。

【讨论】:

  • 嗯,在某种程度上,帮助程序已经全部捆绑并可用于视图引擎。问题是,如果我在给定时间在其中一个助手内部工作,我无法访问其他助手。当然,我可以将该助手对象作为参数传递给我正在调用的助手,并且它可以访问所有这些对象。我只是想知道是否有更本地的方式来做到这一点。