繁体   English   中英

从 Sails.js 中的 action2 传递值以查看(及其部分)

[英]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 的错误,因为它无法(正确)访问原始路由中定义的objectpage )。 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.resthis.req来访问resreq 对于您的用例,您可以执行以下操作:

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.

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