如何在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来改进这个代码片段。