1

我尝试浏览 LiveView 0.17.1 文档的 JS 示例(https://hexdocs.pm/phoenix_live_view/0.17.1/Phoenix.LiveView.JS.html

所以我创建了一个新的 Phoenix 1.6.2 应用程序,mix phx.new demo3 --no-ecto并将mix.exsdeps 部分更改为:

  defp deps do
    [
      {:phoenix, "~> 1.6.2"},
      {:phoenix_html, "~> 3.0"},
      {:phoenix_live_reload, "~> 1.2", only: :dev},
      {:phoenix_live_view, "~> 0.17.1"},
      {:floki, ">= 0.30.0", only: :test},
      {:phoenix_live_dashboard, "~> 0.5"},
      {:esbuild, "~> 0.2", runtime: Mix.env() == :dev},
      {:swoosh, "~> 1.3"},
      {:telemetry_metrics, "~> 0.6"},
      {:telemetry_poller, "~> 1.0"},
      {:gettext, "~> 0.18"},
      {:jason, "~> 1.2"},
      {:plug_cowboy, "~> 2.5"}
    ]
  end

之后,我创建了一个 LiveView 页面并将此示例代码添加到其中:

  def hide_modal(js \\ %JS{}) do
    js
    |> JS.hide(transition: "fade-out", to: "#modal")
    |> JS.hide(transition: "fade-out-scale", to: "#modal-content")
  end

启动服务器失败:

$ mix phx.server
Compiling 1 file (.ex)

== Compilation error in file lib/demo3_web/live/stock_watch_live.ex ==
** (CompileError) lib/demo3_web/live/stock_watch_live.ex:66: JS.__struct__/1 is undefined, cannot expand struct JS. Make sure the struct name is correct. If the struct name exists and is correct but it still cannot be found, you likely have cyclic module usage in your code
    lib/demo3_web/live/stock_watch_live.ex:66: (module)

我必须添加/更改什么来解决这个问题?

4

1 回答 1

0

alias Phoenix.LiveView.JS在文件顶部添加可以解决问题。感谢@scott-汤普森!

文档刚刚更新。 https://github.com/phoenixframework/phoenix_live_view/commit/a0b39649ce6f02561033fd42c7205644fe3a706b#diff-a095f1aa9c79bb58142c5628142a5ddc52bb344547400409a8c6a3237896cedc

于 2021-10-22T19:20:16.943 回答