收到 socket.on 后更新 Sails.js 0.10 中的 ejs 视图
Updating ejs view in Sails.js 0.10 after receiving socket.on
我有一个带有索引操作的 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。
您无法实时更改服务器呈现的 .ejs
视图,因为它们是在服务器上呈现的。这正是像 Angular 这样的框架的用途。 Sails 尽力通过禁止对套接字响应使用 res.view
来强制执行此操作,但如果您真的想要,您可以:
- 使用res.render 将视图呈现为字符串。
- 使用
res.send(aWholeBunchOfHTML)
结束您的控制器操作
- 使用从套接字响应中收到的 HTML 在客户端重新呈现整个页面。
如果您正在使用任何类型的前端库,例如 jQuery,您将以这种方式丢失所有绑定,这是一种可怕的带宽浪费,可能会使您的应用程序性能下降一点比 "realtime"。
但重申一下,无法使用 Sails 仅更改已呈现视图的 部分。如果您在使 Sails 和 Angular 协同工作时遇到问题,我建议您查看 ActivityOverlord 2.0 videocasts and repo.
我有一个带有索引操作的 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。
您无法实时更改服务器呈现的 .ejs
视图,因为它们是在服务器上呈现的。这正是像 Angular 这样的框架的用途。 Sails 尽力通过禁止对套接字响应使用 res.view
来强制执行此操作,但如果您真的想要,您可以:
- 使用res.render 将视图呈现为字符串。
- 使用
res.send(aWholeBunchOfHTML)
结束您的控制器操作
- 使用从套接字响应中收到的 HTML 在客户端重新呈现整个页面。
如果您正在使用任何类型的前端库,例如 jQuery,您将以这种方式丢失所有绑定,这是一种可怕的带宽浪费,可能会使您的应用程序性能下降一点比 "realtime"。
但重申一下,无法使用 Sails 仅更改已呈现视图的 部分。如果您在使 Sails 和 Angular 协同工作时遇到问题,我建议您查看 ActivityOverlord 2.0 videocasts and repo.