[英]Pass values to view (and its partials) from action2 in Sails.js
我在config/routes.js
定义了一个简单的页面路由,在该页面内的部分视图中使用了一些本地人,如下所示:
路线.js :
'get /memo': {
view: 'pages/memo',
locals: {
page: {
title: "Memo",
subtitle: "Prendi note veloci, crea liste e presonalizza le tue TODO List"
}
}
}
虽然我的page.ejs看起来像这样:
<div id="memo">
<%- partial('../partials/title-center.ejs') %>
<!--list-->
</div>
所以,这很好用,我可以在局部视图中检索locals的值。
现在,我想要实现的是在显示页面之前调用控制器action2 ,以便传递更多数据(然后能够在视图中格式化它们)。
我在routes.js
中添加了一个与api/controllers/memo/list.js
的单个 action2关联的新路由:
'get /api/v1/memo/list': { action: 'memo/list' }
并编辑操作以返回所述视图:
...
inputs: {
},
exits: {
success: {
responseType: 'view',
viewTemplatePath: 'pages/memo'
}
},
fn: async function (inputs) {
// All done.
return;
}
...
然而,调用它会给我在局部视图中嵌入 js 的错误,因为它无法(正确)访问原始路由中定义的object
( page
)。 ( Removing the partial view returns no error
)
另一个问题是,如Sails 概念中所推荐的那样,我找不到任何示例说明如何在使用actions2 语法时在操作和视图之间传递数据。
欢迎任何帮助,并提前感谢您的回答。
从控制器/action2 返回的数据不会直接发送到您的 ejs 页面,而是发送到 assets/js/pages/your_page_name.page.js 中关联的 vue.parasails 文件; 在那里您必须添加代码并调用另一个操作或将数据传递给视图 your_page_name.ejs。
在 action2 中,您可以分别使用this.res
和this.req
来访问res
和req
。 对于您的用例,您可以执行以下操作:
return this.res.view('pages/memo', {
// pass in as much locals as you want
page: {
title: "Memo",
subtitle: "Prendi note veloci, crea liste e presonalizza le tue TODO List"
}
})
简单的方法:
exits: {
success: {
viewTemplatePath: 'pages/product-type/view-product-type'
},
},
fn: async function () {
return {value1: 'a', value2: 'b'};
}
您还可以使用:
fn: async function (inputs, exits) {
return exits.success({value1: 'a', value2: 'b'});
}
如果您希望响应为 html:
exits: {
success: {
statusCode: 200,
responseType: 'htmlResponse',
description: ''
}
},
fn: async function(inputs, exits){
let ejs = require('ejs');
let cb = function(err, html){
if (err){
return exits.serverError(err);
}
return exits.success(html);
};
ejs.renderFile('./views/templates/dataTables.ejs',{someData: {a: 1, b:2}}, cb);
return cb;
}
编辑:
您还可以向客户端公开服务器值<%- exposeLocalsToBrowser({keys: ['data'] } ); %>
<%- exposeLocalsToBrowser({keys: ['data'] } ); %>
然后它们可以通过window.SAILS_LOCALS
铁:
beforeMount: function() {
this.data = window.SAILS_LOCALS['data'];
}
更多: https : //sailsjs.com/documentation/concepts/views/locals
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.