Phoenix/EmberJS 带有操作的 Websocket 访问
Phoenix/EmberJS Websocket access with actions
我有一个基本的 Ember 前端应用程序,它通过初始化程序中的 websocket 连接到 Phoenix 后端。接下来我希望能够使用chan.push("new_msg", {body: "test"})
向凤凰频道发送消息
显然,我不能从初始化程序本身执行此操作,但这是唯一定义 'chan' 的地方,我不知道如何从其他位置访问它。
我希望这发生在 {{input action="sendMessage()"}}
的动作上,所以我尝试了几种方法,例如将 sendMessage()
函数放在初始化程序中并在组件动作中调用它等...但是每当我尝试从另一个文件访问初始化程序(反之亦然)时,我都会收到一条错误消息,指出该函数未定义。我知道当然不应该以这种方式使用初始化程序,我只是不知道将代码放在哪里,这样我就可以访问我定义的 websocket 连接。
与此问题相关的大部分代码与您将在本指南中看到的内容相符:http://chrismcg.com/2015/07/04/teaching-ember-cli-to-talk-to-phoenix-sockets/。不幸的是,这不包括如何从前端为初学者使用这个 websocket 连接。
这听起来像是一项服务工作,请参阅 http://guides.emberjs.com/v2.1.0/applications/services/ 上的相应文档。
该服务将有一个 chan
属性 来保存通道,以及 sendMessage
操作,然后您只需在正确的上下文中注入该服务并执行类似于:
{{input action=(action service.sendMessage)}}
这是使用 closure actions 直接触发服务的操作。
我有一个基本的 Ember 前端应用程序,它通过初始化程序中的 websocket 连接到 Phoenix 后端。接下来我希望能够使用chan.push("new_msg", {body: "test"})
向凤凰频道发送消息
显然,我不能从初始化程序本身执行此操作,但这是唯一定义 'chan' 的地方,我不知道如何从其他位置访问它。
我希望这发生在 {{input action="sendMessage()"}}
的动作上,所以我尝试了几种方法,例如将 sendMessage()
函数放在初始化程序中并在组件动作中调用它等...但是每当我尝试从另一个文件访问初始化程序(反之亦然)时,我都会收到一条错误消息,指出该函数未定义。我知道当然不应该以这种方式使用初始化程序,我只是不知道将代码放在哪里,这样我就可以访问我定义的 websocket 连接。
与此问题相关的大部分代码与您将在本指南中看到的内容相符:http://chrismcg.com/2015/07/04/teaching-ember-cli-to-talk-to-phoenix-sockets/。不幸的是,这不包括如何从前端为初学者使用这个 websocket 连接。
这听起来像是一项服务工作,请参阅 http://guides.emberjs.com/v2.1.0/applications/services/ 上的相应文档。
该服务将有一个 chan
属性 来保存通道,以及 sendMessage
操作,然后您只需在正确的上下文中注入该服务并执行类似于:
{{input action=(action service.sendMessage)}}
这是使用 closure actions 直接触发服务的操作。