gpt4 book ai didi

node.js - 调用 sails.renderView 时在 Sails.js 中指定布局文件

转载 作者:搜寻专家 更新时间:2023-10-31 23:17:13 25 4
gpt4 key购买 nike

我正在使用 sails 辅助方法 sails.renderView 将 View 呈现为字符串,然后在电子邮件中使用该字符串,如下所示:

sails.renderView('emails/booking', emailData, function (err, view) {
emailService.send(user.email, view);
});

这样渲染 View 的时候可以指定布局文件吗?我正在使用 ejs 模板引擎。

我似乎无法使用 View 配置 (config/views.js),因为它是基于路由的。

我查看了 sails/lib/hooks/views/render.js 中的渲染函数,看起来要使用的布局文件可以在选项对象中传递,但是当我这样做时, 没有返回 View 。

最佳答案

编辑:抱歉,我错过了这是在常规请求/响应上下文之外生成的。答案已更改以反射(reflect)这一点。

我浏览了 sails 代码,特别是 the render engine

/**
* sails.hooks.views.render(relPathToView, options, cb_view)
*
* @param {String} relPathToView
* -> path to the view file to load (minus the file extension)
* relative to the app's `views` directory
* @param {Object} options
* -> options hash to pass to template renderer, including locals and locale
* @param {Function} cb_view(err)
* -> called when the view rendering is complete (response is already sent, or in the process)
* (probably should be @api private)
* @api public
*/
... lots of code ...
// if local `layout` is set to true or unspecified
// fall back to global config
var layout = options.layout;
if (layout === undefined || layout === true) {
layout = sails.config.views.layout;
}

事实证明,您可以将布局设置为传递给 sails.renderView()

的选项对象的一部分

因此,如果您有一个电子邮件模板 emailLayout.ejs,您可以通过将此行添加到您的 Controller 来使用它,如下所示:

emailData.layout = '/emailLayout';
sails.renderView('emails/booking', emailData, function (err, view) {
emailService.send(user.email, view);
});

重要的警告,这明确地只适用于 ejs 模板。我还没有测试过这个,所以让我知道它是怎么回事

关于node.js - 调用 sails.renderView 时在 Sails.js 中指定布局文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32962242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com