【问题标题】:Updating ejs view in Sails.js 0.10 after receiving socket.on收到 socket.on 后更新 Sails.js 0.10 中的 ejs 视图
【发布时间】:2015-01-29 19:33:26
【问题描述】:

我有一个带有索引操作的 MenuItemController,它对 mongodb 数据库进行自定义查询,然后使用 res.view({menuitems: menuitems}) 加载带有返回数据的视图 (ejs)
现在的问题是,我想在创建新菜单项时实时更新 ejs 视图。我已经调用了 MenuItem.subscribe(menuitems) 。 Sails 文档显示了如何订阅和接收 websockets (http://sailsjs.org/#/documentation/reference/websockets),但在所有示例中,他们只在最后执行一个 console.log(),没有关于如何将数据传递到 ejs 模板的示例。

我已经尝试过使用 angular 而不是 ejs,但是在让事情正常工作时遇到了各种各样的麻烦,所以我宁愿坚持使用 vanilla Sails.js。

【问题讨论】:

  • 欢迎来到 SO!为了帮助其他人回答您的问题,请提供一些代码来显示您到目前为止所做的尝试。 stackoverflow.com/help/mcve

标签: websocket sails.js


【解决方案1】:

您无法实时更改服务器渲染的.ejs 视图,因为它们是在服务器上渲染的。这正是像 Angular 这样的框架的用途。 Sails 通过禁止使用 res.view 进行 Socket 响应来尽力执行此操作,但如果您真的愿意,您可以:

  1. 使用res.render 将视图呈现为字符串。
  2. res.send(aWholeBunchOfHTML) 结束您的控制器操作
  3. 使用您从套接字响应收到的 HTML 在客户端上重新呈现整个页面。

如果您使用任何类型的前端库(如 jQuery),您将失去所有的绑定,这是一种可怕的带宽浪费,可能会使您的应用程序比“实时”少一点。

但重申一下,使用 Sails 无法仅更改已渲染视图的 一部分。如果您在使 Sails 和 Angular 协同工作时遇到问题,我建议您查看 ActivityOverlord 2.0 视频广播和 repo

【讨论】:

  • 经过几个小时的头痛后,我最终能够将 Angular 包含在项目中。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-10-02
  • 2014-12-23
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 2014-03-30
  • 2013-10-20
  • 2014-11-22
相关资源
最近更新 更多