2016-04-25 35 views
0

如何在我的JavaScript中使用來自Phoenix控制器的變量?如何在JavaScript中使用Phoenix控制器變量?

我使用React作爲前端。我不能在JavaScript中使用<%= ... %>

defmodule Familytree.PageController do 
    use Familytree.Web, :controller 

    alias Familytree.Users 
    alias Familytree.Tags 
    alias Familytree.UserTag 

    plug Familytree.Plugs.Auth 
    plug :scrub_params, "users" when action in [:create, :update] 
    plug :scrub_params, "tags" when action in [:add_tag,:delete_tag] 

    def index(conn, _params) do 
    users = Repo.all(Users) 
    tags = Repo.all(Tags) 
    render(conn, "index.html", users: users, tags: tags, current_user: get_session(conn, :current_user)) 
    end 
end 
+0

你想在初始頁面加載時只加載一次數據嗎? – Dogbert

+0

是的。我需要這個對象,因爲我正在做搜索欄,所以我需要那個對象的所有名字 – ake

回答

0

您可以嘗試渲染視圖中的值來構建HTML屬性,然後使用您的JavaScript獲取此值,這是比較常見的操作。

像這樣的事情可以做:

my_view.eex

<div data-name="<%= @some_name_from_controller %>" id="component"> 
</div> 

的script.js

var name = $("#component").data("name"); 

你可以找到更多關於datahere

希望有幫助!

+0

是的,這對我不起作用。也許我做錯了什麼,我不知道。當我把這條線

我得到參數錯誤 – ake

+0

@ake你收到什麼樣的錯誤?你能提供更多的信息並粘貼更多的代碼(例如你的控制器)嗎? –

+0

當我寫這行時:

我得到這個錯誤 指定@user在eex模板中不可用。 在我的控制器中,我有:別名Familytree.Users,這是我的所有信息,我需要在我的JavaScript使用 – ake

0

您可以使用PhoenixGon它把所有鳳凰變量窗口範圍,可以使用所有這些變量,而且還產生了獲得這個JS方法瓦爾:

def index(conn, _params) do 
    put_gon(conn, [users: Repo.all(Users), tags: Repo.all(Tags)]) 
    render(conn, "index.html", current_user: get_session(conn, :current_user)) 
end 

,並從瀏覽器控制檯或使用它javascript模塊:

window.Gon.getAsset('users') 
// => [user, user1 ...] 

它還有助於保持js vars和html.eex vars在不同的部分並保持清晰。

相關問題