【问题标题】:Sails.js multiple controllers/models to one viewSails.js 多个控制器/模型到一个视图
【发布时间】:2017-03-01 20:58:34
【问题描述】:

我一直在尝试sails,到目前为止,我已经能够显示数据库表模型中所有项目的索引。但是,我有两个不同的模型,modelA 和 modelB,我想将它们显示到视图根目录中称为仪表板的单个视图 - /dashboard。

但是,我很难理解如何让不同的控制器将列表显示到仪表板上。我如何完成这项工作,可以使用两个不同的控制器完成吗?如果可以,如何完成。或者我可以创建一个名为仪表板的单独控制器来调用模型的不同实例吗?

很难理解这个......

【问题讨论】:

  • 您将拥有一个具有仪表板功能(或 w/e)的控制器,该控制器将呈现一个视图并将您需要的数据传递给它。或者,您使用某个控制器呈现视图,并在视图内部通过请求获取数据(您将从仅返回数据而不是视图的控制器操作中获取)
  • 有没有办法让我的控制器指向我在不同目录中的视图? res.vew 指向 /views/mycontroller/dashboard,而我在 /views/dashboard 的根目录上有仪表板。
  • 是的, res.view 将视图路径作为参数。你可以放任何你想要的东西。此外,您可以在 routes.js 中配置路由并在那里指定视图。 sailsjs.com/documentation/reference/response-res/res-view

标签: sails.js


【解决方案1】:

如果我理解正确,您需要一个从 2 个不同模型中获取数据并将该数据发送到视图中的控制器。

由于 node 现在支持它,我将使用 async/await 作为示例,但它与回调相同,但您必须嵌套调用或使用 caolan async。

const DashBoardController = {
  async show(req, res){
    const instanceA = await ModelA.findOne(1) // I used a hardcoded number for simplicity
    const instanceB = await ModelB.findOne(1)
    res.view('mycrontroller/dashboard', {instanceA, instanceB})
  }
}

export DashBoardController;

然后在您看来,您只需使用您定义的键名访问它...instanceA 和 instanceB

如果这不是你的意思,请告诉我。

【讨论】:

    猜你喜欢
    • 2014-06-12
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多