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

Javascript 如何在Sails.js中配置把手的部分和布局?,javascript,handlebars.js,sails.js,Javascript,Handlebars.js,Sails.js,我运行并安装了受支持的,因此 我可以提供.handlebar文件中的页面,它工作得很好。 我不知道在Sails工作流中,以Sails的方式,我应该在哪里注册partials、helpers等。。。我更多的是寻找最佳实践,而不仅仅是一个可行的解决方案,但任何帮助都将不胜感激 我的时间不多了,但我想我快找到答案了。当我获得更多详细信息时,我会更新此回复,但如果您想查看它,请查看包含的consolid.js文件中的第501行。点击此处查看github: 看起来把手有一个for循环,它从options.

我运行并安装了受支持的,因此

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

我的时间不多了,但我想我快找到答案了。当我获得更多详细信息时,我会更新此回复,但如果您想查看它,请查看包含的consolid.js文件中的第501行。点击此处查看github:

看起来把手有一个for循环,它从options.partials注册partials

这并不是一个非常令人满意的解决方案,但是如果你把你的partials推到options对象上,那么它可能会从中拉出来


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

编辑:这很容易通过express3 Handlebar模块实现,同时除了要求您将布局文件移动到
视图/布局
中之外,不改变任何默认的Sails功能。我在这里打开了一个pull请求(),如果您想查看它的话


在对sails源代码进行了一点挖掘之后,在渲染视图时引入片段是相当容易的

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

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

  // new.handlebars
  {{> header}}
      <b>Main content</b>
  {{> footer}}
//LoginController.js
新:功能(req、res){
res.view({
部分:{
标题:'../partials/header',
页脚:“../partials/footer”
}
})
}
//新车把
{{>头}
主要内容
{{>页脚}
通过附加名为
Helpers
的键并传入功能,可以以类似的方式注册Helpers


如果在Sails core中有一种更正式的方法来实现这一点,那将是一件好事,但现在这应该足以满足那些想要使用把手而不是ejs的人,同时保留一些布局的外观

我使用的是上面给出的答案,但我似乎已经在sails 0.9.8上使用了partials,没有任何漏洞

这是我的

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

views/home/index.handlebar=>使用部分

视图/home/partials/partial.handlebar=>partial正在使用

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

路径相对于默认情况下调用的模板文件。因此,如果您希望每个控制器使用不同的分区,那么可以使用分区/ 如果您想为所有模板使用全局分区,请使用../partials/


显然,这完全取决于您,因为您需要在控制器中手动指定每个部分。

我正在运行v0.10测试版,但这不应影响我如何使其在下面工作:

  • 发动机应按预期安装在把手上
  • 路由需要显式定义控制器和操作。设置视图不起作用。(除非有办法在routes文件中设置partials)
  • 控制器需要定义为相对于视图的路径的分区
  • config/views.js

    module.exports.views = {
      engine      : 'handlebars',
      layout      : false
    };
    
    '/': {
      controller: 'site',
      action: 'index'
    },
    
    module.exports = {
      // Render Index View
      index: function(req, res) {
        res.view({
          partials: {
            head: 'partials/head',
            tail: '../partials/tail',
          },
        });
      }
    };
    
    {{> head}}
    <h3>SITE INDEX</h3>
    
    <h1>HEAD</h1>
    {{> tail}}
    
    <h2>HEAD TAIL</h2>
    
    config/routes.js

    module.exports.views = {
      engine      : 'handlebars',
      layout      : false
    };
    
    '/': {
      controller: 'site',
      action: 'index'
    },
    
    module.exports = {
      // Render Index View
      index: function(req, res) {
        res.view({
          partials: {
            head: 'partials/head',
            tail: '../partials/tail',
          },
        });
      }
    };
    
    {{> head}}
    <h3>SITE INDEX</h3>
    
    <h1>HEAD</h1>
    {{> tail}}
    
    <h2>HEAD TAIL</h2>
    
    SiteController.js

    module.exports.views = {
      engine      : 'handlebars',
      layout      : false
    };
    
    '/': {
      controller: 'site',
      action: 'index'
    },
    
    module.exports = {
      // Render Index View
      index: function(req, res) {
        res.view({
          partials: {
            head: 'partials/head',
            tail: '../partials/tail',
          },
        });
      }
    };
    
    {{> head}}
    <h3>SITE INDEX</h3>
    
    <h1>HEAD</h1>
    {{> tail}}
    
    <h2>HEAD TAIL</h2>
    
    视图/站点/索引。把手

    module.exports.views = {
      engine      : 'handlebars',
      layout      : false
    };
    
    '/': {
      controller: 'site',
      action: 'index'
    },
    
    module.exports = {
      // Render Index View
      index: function(req, res) {
        res.view({
          partials: {
            head: 'partials/head',
            tail: '../partials/tail',
          },
        });
      }
    };
    
    {{> head}}
    <h3>SITE INDEX</h3>
    
    <h1>HEAD</h1>
    {{> tail}}
    
    <h2>HEAD TAIL</h2>
    
    {{>head}
    站点索引
    
    视图/站点/部分/头部把手

    module.exports.views = {
      engine      : 'handlebars',
      layout      : false
    };
    
    '/': {
      controller: 'site',
      action: 'index'
    },
    
    module.exports = {
      // Render Index View
      index: function(req, res) {
        res.view({
          partials: {
            head: 'partials/head',
            tail: '../partials/tail',
          },
        });
      }
    };
    
    {{> head}}
    <h3>SITE INDEX</h3>
    
    <h1>HEAD</h1>
    {{> tail}}
    
    <h2>HEAD TAIL</h2>
    
    头部
    {{>tail}
    
    视图/部分/尾部。把手

    module.exports.views = {
      engine      : 'handlebars',
      layout      : false
    };
    
    '/': {
      controller: 'site',
      action: 'index'
    },
    
    module.exports = {
      // Render Index View
      index: function(req, res) {
        res.view({
          partials: {
            head: 'partials/head',
            tail: '../partials/tail',
          },
        });
      }
    };
    
    {{> head}}
    <h3>SITE INDEX</h3>
    
    <h1>HEAD</h1>
    {{> tail}}
    
    <h2>HEAD TAIL</h2>
    
    头尾
    
    输出
    头部
    头尾
    站点索引
    
    供参考

    如果您使用的是Sails 0.10或更高版本,我已经发布了一个NPM包,用于在

    还有一个建议的用于sails generate后端的PR,以便在使用“sails generate–template==handlebar”时正确支持handlebar的布局和部分,无需额外代码,并基于路径自动发现部分(aka.views/partial/**)


    请参阅:

    有关在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'
    

    如果我们对文件使用.handlebar扩展名而不是.hbs,那么Sails在本地支持handlebar及其(多布局、分区)

    因此,为了在帆船上使用把手而不是EJS,它建议使用合并(它是一个模板引擎合并库)。车把与SailsJs+consolid配合使用效果良好

    您需要安装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存储库中找到它。()


    它类似于SailsJs为jade正式推出的名为balderdashy/sails生成视图的jade

    我也有同样的问题。我试过创建视图/部分/并将它们放在那里,我试过视图/和视图//甚至视图//部分/:-(我不认为Sails会自动获取这些内容。评论很清楚,
    布局支持只针对ejs视图引擎实现!对于大多数其他引擎,这是没有必要的,因为它们自己实现了部分/布局
    ,只是没有说明应该如何/在哪里实现。我不知道