如何在Sails.js上注册一个Handlebars partial partials文件夹?

我的Sails.js应用程序中有以下文件夹结构:

assets/ myModule/ views/ partials/其中myModule是一个Backbone组件(虽然我的客户端不是一个完整的Backbone应用程序)

有一个Handlebar部分x.handlebars需要通过服务器和客户端呈现。

当客户端不能访问 views/时,我的斗争就开始了,因此无法在Backbone模块上加载它。

然后我试图将其移动到assets/myModule/templates/这将是可访问的,但现在我的主要模板views/layout.handlebars无法加载该部分,如果我尝试这样的:

{{> ../assets/myModule/templates/x}}

这不起作用(我假设Handlebars使用视图/作为布局的根级别)。

在这种情况下我只能看到两种可能的解决scheme:

  • 复制这些布局,并在每个位置使用一个(不理想,但工作)

  • 将其放置在assets/myModules/templates/x并在Sails上注册一个Handlebars部分,以使其可用于服务器端呈现。

我怎么能做第二个解决scheme? 是否有可能注册一个全局部分的方式,我们可以做同样的方式与帮助function在config/views.js

我的目标是在控制器之外的configuration级别使用Handlebars.registerPartial函数,以便部分可以被其他模板重用。

复制代码是没有必要的。 有很多不同的方法可以实现这一点,取决于您将要寻找的优化configuration文件。

一个简单的解决scheme是用a节点的fs读取api / controller中的hbs文件,然后用Handlebars进行编译并将其传递给模板,如下所示:

 var rawTemplate = fs.readFileSync('assets/hbs/client-side-template.hbs', "utf8"); var processedTemplate = Handlebars.compile(rawTemplate); return res.render('whiteboard/dualloadview', { myPartialAsVariable: processedTemplate({}) }); 

你将不得不弄清楚如何处理partials使用的上下文和variables。 你也可以通过查看保存在内存中的文件,并研究如何用Handle而不是使用variables来注册partials来改进这个代码片段。