【问题标题】:Phoenix/EmberJS Websocket access with actionsPhoenix/EmberJS Websocket 访问与操作
【发布时间】:2015-10-23 14:12:47
【问题描述】:

我有一个基本的 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 连接。

【问题讨论】:

  • 你的动作语法错误,应该是{{input action="sendMessage"}}
  • 是的,我一直在溜进这个。坏习惯。谢谢。

标签: javascript ember.js phoenix-framework


【解决方案1】:

这听起来像是一项服务工作,请参阅http://guides.emberjs.com/v2.1.0/applications/services/ 上的相应文档。 该服务将有一个 chan 属性来保存通道和 sendMessage 操作,然后您只需在正确的上下文中注入服务并执行类似的操作:

{{input action=(action service.sendMessage)}}

那是使用closure actions直接触发服务的动作。

【讨论】:

  • 太棒了!完美解决了一切!介意我问一个快速的语法问题吗?我需要将参数(作为消息的输入内容)传递给 sendMessage 函数,但无法准确计算出来。任何想法?非常感谢!
  • 你可以做 (action service.sendMessage attributeName)sendMessage 将被调用 attributeName 作为第一个参数。如果你设置value=attributeName我相信它也应该发送它?
  • 完美解决方案!再次感谢!
猜你喜欢
  • 2023-04-05
  • 2015-08-08
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多