【问题标题】:Rendering templates using websockets使用 websocket 渲染模板
【发布时间】:2016-02-29 17:17:15
【问题描述】:

我想知道在通过 websockets 添加内容时是否有办法渲染凤凰模板?如果我想使用 websockets 添加一些复杂的 html 结构作为模板而不在 javascript 代码中复制此结构,该怎么办?

我看到的唯一方法是在控制器中生成模板 html,如下所示:

def create(conn, params) do
  #some code
  Endpoint.broadcast!("user_room:123", "new_comment", %{comment_content: MyApp.PostView.render(conn, "comment.html", comment: comment)})
  #some code
end

然后将此生成的内容添加到处理通道响应的 javascript 文件中的页面中。

我还没有尝试过,所以它甚至可能不起作用,但我想知道是否有更合适的方法来做到这一点?如果有可能吗?

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    对于这样的任务,你基本上有两种选择:

    1. 在服务器端渲染 HTML 并通过 websockets 发送,这就是你想要做的
    2. 在客户端渲染HTML,所以你只需要通过websockets发送数据

    MyApp.PostView.render(conn, "comment.html", comment: comment)} 是处理此问题的完美方式,如果您想使用 Phoenix 模板,这是上面描述的第一种情况。

    不要忘记它返回 {:safe, html} 而不仅仅是 HTML,因此您可能希望使用 render_to_string 通过 websockets 发送它。

    处理此问题的第二种方法的优点是发送的数据更少,但您将无法轻松地重用模板,因此这取决于您的要求和您的应用程序。

    【讨论】:

    • 我想我最终还是会选择第一个选项,谢谢
    • render_to_string 是这里得到你想要的正确答案。
    猜你喜欢
    • 2010-11-30
    • 2012-09-08
    • 2010-10-28
    • 2011-12-27
    • 1970-01-01
    • 2023-03-19
    • 2018-11-25
    • 1970-01-01
    • 2016-11-13
    相关资源
    最近更新 更多