2011-09-05 77 views
4

我有一些Javascript需要分配一個ruby字符串。在這種情況下,我寫了一些需要登錄用戶電子郵件地址的JavaScript函數。我正在使用haml。如何將ruby字符串傳遞給rails中的application.js文件

在我的應用程序佈局文件(application.html.haml)我能做到這一點,它會工作:

%script{:type => "text/javascript", :charset => "utf-8"} 
    $(document).ready(function() { 
    alert('hello'+ "#{User.find(current_user).email}"); 
    }); 

,但我有一個專門的js文件我的應用程序。 application.js文件

如何從我的視圖中將登錄用戶的電子郵件地址傳遞給application.js文件?

以下application.js不起作用。

$(document).ready(function() { 
    alert('hello' + "#{User.find(current_user).email}"); 
}); 
+2

順便說一句,我建議移動查詢即'User.find(CURRENT_USER)'出的通過設置結果o來查看並進入控制器f查詢「@ current_user」 - 保持代碼基礎更多MVC_,並且從長遠來看,更具可讀性和可管理性。 – cmpolis

回答

1

,你可以設置在一個全局JavaScript變量用戶信息:

%script{:type => "text/javascript", :charset => "utf-8"} 
    var user = { email: "#{escape_javascript User.find(current_user).email}" } 
    $(document).ready(function() { 
    alert('hello ' + user.email); 
    }); 

,然後關在application.js

$(document).ready(function() { 
    alert('hello ' + user.email); 
}); 

和你的頁面應該說 「你好」 的兩倍。

此外,不會current_user通常已經是一個用戶實例?如果是,那麼current_user.email應該是足夠的,如果沒有,那麼設置,然後你想在你的控制器中設置@user = ...,然後在你的視圖中使用@user.email

我希望我得到了HAML的權利,我不使用它,所以我有點在語法猜測。

+0

這將工作。謝謝。 – Mike

1

我假設application.js代碼是在一個函數內(即您需要引用當前用戶的電子郵件地址)。如果是這樣,那麼爲什麼不從用戶不可見的容器標籤中讀取數據/值呢?你的看法(這是ERB/HAML /等 - 只是沒有JS - 那麼可以這樣寫集裝箱電子標籤與模型評估適當的值

0

您可以使用gon寶石從控制器變量傳遞給JavaScript

相應安裝寶石和安裝,然後調用gon.current_user_email = current_user.email在控制器中。

然後訪問該串以JavaScript等gon.variable_name

相關問題