javascript - 用于连接到 Phoenix channel 的简约 html/javascript 包

标签 javascript elixir

我正在寻找一种方法来为前端开发人员创建一个极简主义的演示包,以便他们可以轻松地集成 Elixir/Phoenix api 服务器和移动 HTML5 应用程序或非 Phoenix 提供的(旧版)web 应用程序之间的 channel 。

注意:Javascript 从来都不是我的 friend ......

我正在使用 --no-brunch 生成的 Phoenix 应用程序进行测试。 app.jsphoenix.js 都位于priv/static/js/

app.js 包含:

var socket = null
// Responds to a click on a "Connect" button on the GUI
function doConnect() {
    socket = new Socket("/socket", {params: {token: "abc"}})

    socket.connect()
    let channel = socket.channel("user:anonymous", {})
    channel.join()
    .receive("ok", resp => { console.log("Joined successfully", resp) })
    .receive("error", resp => { console.log("Unable to join", resp) })
}
...
// some other GUI callbacks

当我放入 .html 文件时:

<script src="<%= static_path(@conn, "/js/phoenix.js") %>"></script
<script src="<%= static_path(@conn, "/js/app.js") %>"></script>

我进入控制台

ReferenceError: Socket is not defined

另一方面,如果我从 .html 中删除 phoenix.js 并将其放入 app.js使用 import "./phoenix.js",我在控制台中得到 SyntaxError: import declarations may only appear at top level of a module

那么 .js 文件应该放在哪里,以及如何包含它们以获得有效的东西?

也许相关的问题是:如何在没有早午餐的情况下使用 channel ?

最佳答案

我从Elixir Forum得到了答案.对 Socket 构造函数的调用不应该是 socket = new Socket("/socket", {params: {token: "abc"}}) 而是 socket = new Phoenix.Socket("/socket", {params: {token: "abc"}}).

一旦这个就位,一切都很好。

关于javascript - 用于连接到 Phoenix channel 的简约 html/javascript 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46238561/

相关文章:

javascript - 如何让 jQuery 在上传之前选择文件时过滤文件类型?

elixir - 如何重新进入节点并捕获其 I/O,就像使用 iex 启动一样?

elixir - 如何使用Ecto的时间戳将时间戳添加到现有表中?

elixir - 如何为 ex_admin 和 phoenix >=1.3.0-rc 定义正确的命名空间

postgresql - ecto jsonb 数组和 map 转换问题

elixir - 我应该在 Controller 或模型中为 Elixir Phoenix 使用 Ecto.Repo 吗?

javascript - jquery - 谁是我的 parent 听众?

javascript - 如何显示多个用户输入的答案以及如何将其全部写入文本文件

javascript - 带有自定义 slider 导航的 Slick GoTo 将不起作用

javascript - 如何改变负值的间隔?使用 Highcharts