10

我运行Sails0.9.7并安装了受Consolidate.js支持的Handlebars ,因此受 Sails 支持

我可以从.handlebars文件中提供页面,它工作得很好。我不知道在 Sails 工作流程中,在Sails 方式中,我应该在哪里注册partials、helpers 等……我更多的是寻找最佳实践,而不仅仅是一个可行的解决方案,但任何帮助都将不胜感激。

4

7 回答 7

8

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

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

配置/views.js

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

配置/routes.js

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

站点控制器.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>

输出

<h1>HEAD</h1>
<h2>HEAD TAIL</h2>
<h3>SITE INDEX</h3>
于 2014-02-03T21:59:39.073 回答
4

我正在使用上面给出的答案,但我似乎已经让部分功能与sails 0.9.8 一起工作而没有黑客攻击。

这就是我所拥有的。

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

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

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

那么只要你使用这样的东西,它就可以完美地工作。res.view({ partials: { partial: 'partials/partial', 页脚: 'partials/footer' } })

路径相对于默认调用的模板文件。因此,如果您希望每个控制器有不同的部分,则使用 partials/;如果您希望所有模板的全局部分,则使用 ../partials/

显然,这完全适合您,因为无论如何您都需要在控制器中手动指定每个部分。

于 2014-01-05T10:51:49.733 回答
2

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


在对sails 源代码进行了一些挖掘之后,在渲染视图时很容易引入局部视图。

当您调用res.view控制器操作时,只需传入一个局部对象作为“本地”的一部分,其中包含您想要呈现的局部列表。

  // 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 同时保留一些布局外观的人来说应该足够了。

于 2013-11-07T23:34:21.280 回答
2

供参考,

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

还有一个针对sails-generate-backend 的建议PR,以便在使用“sails generate –template==handlebars”时正确支持车把的布局和部分,而无需额外的代码和基于路径自动发现部分(又名。视图/部分的/**)

见:https ://github.com/balderdashy/sails-generate-backend/pull/9

于 2014-11-10T17:42:36.663 回答
1

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

看起来对于 Handlebars 有一个 for 循环从 options.partials 注册部分。

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

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

于 2013-11-07T19:45:42.927 回答
0

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

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

npm 安装车把

2)改变你的配置/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'
于 2016-10-15T15:17:42.767 回答
0

如果我们对文件使用 .handlebars 扩展名而不是 .hbs,Sails 本身就支持把手及其(多布局、部分)。

所以要在 Sails 中使用把手而不是 EJS,建议使用consolidate(它是一个模板引擎安慰库)。Handlebars 与SailsJs + consolidate配合使用效果很好。

您需要安装合并。

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 的

于 2017-02-27T18:30:18.443 回答