我正在Elixir的纸牌游戏中工作,游戏的状态由GenServer管理。当用户导航到" games / new"我在GameController#new action中添加了一行来启动GenServer并返回初始化状态。然后我可以通过调用render来将这个状态传递给模板。
def new(conn, _params) do
changeset =
conn.assigns[:current_user]
|> Ecto.build_assoc(:games)
|> GamePlay.change_game()
War.GamePlay.Game.start_game()
%War.GamePlay.Game{user_cards: user_hand, computer_cards: comp_hand, status: status} =
Server.read(War.GamePlay.Server)
render(conn, "new.html", changeset: changeset, user_hand: user_hand, comp_hand: comp_hand, status: status)
end
在我的模板中,我可以使用这些变量来抓住状态,
<h4> Game Status: <%= @status %> </h4>
它将返回&#34;正在进行中&#34;。
我不希望用户离开页面,但我如何从视图中调用GenServer?例如,在战争游戏中,用户需要点击&#34; next card&#34;,这是如何与GenServer绑定的,以便按钮调用该功能?如何将当前状态传递给模板?