我想以我自己的方式组织模板中socket
和的使用。Presence
作为一个新手,在我看来,将所有处理通道的客户端代码放入其中sockets.js
可以将其转换为非常大的一块。特别是如果有许多页面使用套接字/存在。我不知道哪个是最好的解决方案(或者这是否对其他人来说是个问题),但是我误解了 js 的功能,导致我很好地组织了代码。
在socket.js
import {Socket, Presence} from "phoenix"
// Other stuff
export {
Presence,
socket
}
在app.js
,而不是import socket from "./socket"
在结尾,我写
import {Presence, socket} from "./socket"
window.getPhoenixSocket = function () {
return socket;
};
window.getPhoenixPresence = function () {
return Presence;
};
在模板中eex
(我知道混合 html 和脚本不是一个好习惯)(除了 React 家伙!)我编写了以下脚本:
<script>
window.onload = function () {
let channel = getPhoenixSocket (). channel ("cute: channel", {})
let Presence = getPhoenixPresence ();
....
// Here I can use channel and Presence for my obscure purposes
....
}
</script>
因此,使用套接字的每个页面的代码都保留在自己的页面中,而不是在socket.js
由于我对这个解决方案并不完全满意,所以我问你,这是正确的吗?是不是?最好的方法是什么?有没有人有这个问题?
===== 编辑 ======
解决方案1:
elixirforum 的同行曝光了一个清晰、聪明、善良和完整的回应
解决方案2:
Deini 在 Elixir-Lang 的 Slack Channel 中指出的另一个解决方案再次使用 Webpack,并且涉及更多 Phoenix-Elixir 风格,已由 hoang_nguyen 在Medium上发布。
解决方案3: