繁体   English   中英

如何在Sails.js中配置Handlebars的部分和布局?

[英]How to configure partials and layouts for Handlebars in Sails.js?

我运行Sails 0.9.7并安装了Consolidate.js支持的Handlebars ,因此得到了Sails的支持

我可以从.handlebars文件提供页面,它工作得很好。 我无法想象在哪里,在Sails工作流程中,以Sails的方式 ,我应该注册部分,帮助等...我更多的是寻找最佳实践,而不仅仅是一个有效的解决方案,但任何帮助将不胜感激。

我正在运行v0.10测试版,但这不应该影响我在下面的工作方式:

  1. 发动机应该是预期的车把
  2. 路由需要明确定义控制器和操作。 设置视图不起作用。 (除非有一种方法我无法弄清楚在路径文件中设置部分)
  3. 控制器需要将部分定义为相对于视图的路径。

配置/ views.js

module.exports.views = {
  engine      : 'handlebars',
  layout      : false
};

配置/ routes.js

'/': {
  controller: 'site',
  action: 'index'
},

SiteController.js

module.exports = {
  // Render Index View
  index: function(req, res) {
    res.view({
      partials: {
        head: 'partials/head',
        tail: '../partials/tail',
      },
    });
  }
};

意见/网站/ index.handlebars

{{> head}}
<h3>SITE INDEX</h3>

意见/网站/谐音/ head.handlebars

<h1>HEAD</h1>
{{> tail}}

视图/分音/ tail.handlebars

<h2>HEAD TAIL</h2>

OUTPUT

<h1>HEAD</h1>
<h2>HEAD TAIL</h2>
<h3>SITE INDEX</h3>

我正在使用上面给出的答案,但我似乎已经使部分工作与风帆0.9.8没有黑客。

这就是我所拥有的。

Config / views.js =>引擎:“把手”

views / home / index.handlebars =>使用partial的主文件。

views / home / partials / partial.handlebars =>部分正在使用。

然后,只要你使用这样的东西,它就完美无缺。 res.view({partials:{partial:'partials / partial',footer:'partials / footer'}})

路径相对于默认调用的模板文件。 因此,如果你想为每个控制器使用不同的部分,你可以使用部分/如果你想要使用所有模板的全局部分,你可以使用../partials/

显然这完全是你自己,因为你需要在控制器中手动指定每个部分。

编辑:这很容易通过express3-handlebars模块实现,同时不更改任何默认的Sails功能,除了要求您将布局文件移动到views/layouts 如果您想查看,我在这里打开了一个拉取请求( https://github.com/balderdashy/sails/pull/1075 )。


在对sails源代码进行一些挖掘之后,在渲染视图时引入部分内容相当容易。

当您在控制器操作中调用res.view时,只需传入一个partials对象作为“locals”的一部分,其中包含您要渲染的部分列表。

  // LoginController.js
  new: function (req, res) {
    res.view({
        partials: { 
          header: '../partials/header',
          footer: '../partials/footer'
        }
    })
  }

  // new.handlebars
  {{> header}}
      <b>Main content</b>
  {{> footer}}

可以通过附加名为helpers的密钥并传入功能,以类似的方式注册帮助程序。

如果在Sails核心中有一种更正式的方法可以做到这一点会很好,但是现在这对于那些想要使用把手而不是ejs同时保留一些相似布局的人来说已经足够了。

仅供参考,

如果您使用的是Sails 0.10或更高版本,我已经发布了一个NPM包来生成默认的车把视图, 网址https://www.npmjs.org/package/sails-generate-views-handlebars

当使用'sails generate -t​​emplate == handlebars'时没有额外的代码和基于路径的自动发现部分(也就是视图)时,还有一个用于sails-generate-backend的PR以便正确支持车把的布局和部分。 /部分/ **)

请参阅: https//github.com/balderdashy/sails-generate-backend/pull/9

我想时间已经不多了,但我已接近答案了。 当我得到更多详细信息时,我会更新此回复,但是如果您想查看它,请查看包含的consolidate.js文件中的第501行。 在github上查看: https//github.com/balderdashy/sails/blob/master/lib/configuration/consolidate.js#L501

对于Handlebars来说,有一个for循环可以注册来自options.partials的部分内容。

这不是一个非常令人满意的解决方案,但是如果你将部分内容推到那个选项对象上,那么它可能会从中拉出来。

我接下来的一个重要问题是,什么是选项对象,它在哪里设置?

要在sails js中配置把手模板,请按照以下步骤操作:

1)在应用程序的node_modules文件夹中安装把手:

npm安装车把

2)更改您的config / views.js

engine:   'handlebars',
layout:   'layouts/layout', // layouts is subfolder of view folder in sails app and layout is a handlebars inside layouts folder.
partials: 'partials'

如果我们使用.handlebars扩展名来代替.hbs,Sails本身支持把手及其(多布局,局部)。

因此,为了在Sails中使用把手而不是EJS,它建议使用巩固 (它是模板引擎安慰库)。 把手SailsJs +合并很好。

您需要安装合并。

npm install consolidate --save

然后你只需要使用以下内容更新config / views.js文件。

module.exports.views = {

engine: {
    ext: 'handlebars',
    fn: require("consolidate").handlebars
  },

layout: 'layouts/layout',

partials: 'partials/'

};

将所有.ebs文件更新为.handlebar文件并更新其中的代码。

一切都会好起来的。

有一个视图生成器 ,为了以后的目的,它将为Sails生成默认视图(它将创建一个默认的目录结构,其中包含默认文件)。

你可以在github存储库中找到它。( https://github.com/bhaskarmelkani/sails-generate-views-hbs

它类似于SailsJs正式推出的名为balderdashy / sails -generate-views-jade的玉器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM