收到socket.on后,在Sails.js 0.10中更新ejs视图

时间:2015-01-29 19:33:27

标签: websocket sails.js

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

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

1 个答案:

答案 0 :(得分:0)

您无法实时更改服务器呈现的.ejs视图,因为它们很好地在服务器上呈现。这正是像Angular这样的框架。 Sails试图通过禁止使用res.view进行Socket响应来强制执行此操作,但如果您真的想要,可以:

  1. 使用res.render将视图呈现为字符串。
  2. 使用res.send(aWholeBunchOfHTML)
  3. 结束您的控制器操作
  4. 使用从套接字响应中收到的HTML重新呈现客户端上的整个页面。
  5. 如果您正在使用任何类型的前端库(如jQuery),您将以这种方式丢失所有绑定,并且这可能会使您的应用程序比“实时”少一点,从而浪费带宽。

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