ogr*_*ogr 5 javascript elixir phoenix-framework phoenix-live-view
我正在尝试在 Javascript 事件触发后使用 Javascript 更新 Liveview。Liveview 必须显示一个<div>元素,其中包含从 Javascript 发送的一些值。
我的问题是:我应该如何将这些值从 Javascript 传递到 Liveview?
我可能还需要 Liveview 在 Javascript 中发送的值。再说一遍:我应该如何将这些值从 Liveview 传递到 Javascript?
有一个用 Javascript 创建的 Livesocket 用于实时查看,但我看不出有什么方法可以从那里获取或设置分配值。在某些时候,从 Liveview 传递值或向 Liveview 传递值的唯一方法似乎是通过 DOM。例如:
<div id="lv-data" phx-hook="JavascriptHook"></div>
Run Code Online (Sandbox Code Playgroud)
let hooks = {};
hooks.JavascriptHook = {
mounted(){
this.el.addEventListener("jsEvent", (e) =>
this.pushEvent("jsEventToPhx", e.data, (reply, ref) =>
console.log("not sure what to do here")));
this.handleEvent("phxEventToJS", (payload) => console.log("data received: " + payload));
}
}
Run Code Online (Sandbox Code Playgroud)
必须将 DOM 与虚拟对象一起使用来<div>进行纯数据交换,这感觉很奇怪......
您的LiveView模块是否已实现来处理jsEventToPhx从前端发送的事件?您必须有一个父级LiveView或LiveViewComponent实现handle_event/3此消息的回调。看:
https://hexdocs.pm/phoenix_live_view/Phoenix.LiveView.html#c:handle_event/3
例如(在您的 LiveView 模块中):
def handle_event("jsEventToPhx", params, socket) do
# Here the `params` variable is what you are sending form the
# client-side, so it will be `%{foo: "bar"}` if you
# follow the next example.
{:reply, %{hello: "world"}, socket}
end
Run Code Online (Sandbox Code Playgroud)
然后在你的 Hook 中,你只需要使用this.pushEvent:
let hooks = {};
hooks.JavascriptHook = {
mounted(){
this.pushEvent("jsEventToPhx", {foo: "bar"}, (reply, ref) =>
// this will print `{hello: "world"}`
console.log(reply)
);
}
}
Run Code Online (Sandbox Code Playgroud)
当您想要将数据发送到 LiveView 并可以选择立即接收响应时,可以使用这种方法。
如果您想LiveView向客户端发送某些内容,则过程会略有不同。push_event从 LiveView 中,您可以在从任何回调返回套接字时使用handle_event,例如:
{:noreply, push_event(socket, "phxEventToJS", %{abc: "xyz"})}
Run Code Online (Sandbox Code Playgroud)
在你的 Hook 中,你订阅事件:
mounted(){
this.pushEvent("jsEventToPhx", {foo: "bar"}, (reply, ref) =>
// this will print `{hello: "world"}`
console.log(reply);
}
this.handleEvent("phxEventToJS", (payload) => {
// this will print `{abc: "xyz"}`
console.log(payload);
}
}
Run Code Online (Sandbox Code Playgroud)
在此处检查客户端-服务器通信部分可能会很有用。
| 归档时间: |
|
| 查看次数: |
4309 次 |
| 最近记录: |