2013-03-16 68 views
-1

我有一個Rails應用程序,它在檢查用戶訪問用戶的個人檔案頁面是否是當前用戶(使用ruby代碼)之後,根據條件邏輯的結果調用JavaScript方法,如下所示。從ruby傳遞信息到js腳本標記

有沒有一種方法可以將用戶的名字(在Ruby代碼中可用<%= @ user.name%>)傳遞給腳本標記,以便我還可以將它傳遞到被調用的javascript函數中(除了我通過的其他參數之外)。

/views/users/show.html.erb

<% if current_user?(@user) %> #@user represents the user who's profile page is being visited 

     <script type='text/javascript'> 
     $(document).ready(function() {  #I want to get <%= @user.name %> inside here 
      var currentuser = true; 
     app.views.user_view.compTemplates(currentuser)}); 
     </script> 

<% else %> 

    ...code ommitted... 

<% end %> 

更新:

第一個答案的建議之後對這個問題,我做了這個腳本標籤中。

var currentusername = <%= @user.name %>; 

然而,一旦<%= @ user.name%>求值(爲「婆婆」,在該例子中),婆婆納在針對在JS代碼的第一時間,並且被註冊現在錯誤「婆婆納未定義」

回答

0

內嵌Ruby有裏面去#{}標籤。

var currentusername = '#{ <%= @user.name %> }'; 
1

我相信你正在尋找這樣的:http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript

實例給出:

$('some_element').replaceWith('<%=j render 'some/element_template' %>'); 

$('some_element').replaceWith('<%= escape_javascript render 'some/element_template' %>'); 

爲特定的例子中,你也可以這樣做:(我不認爲to_json是必需的)

<script type='text/javascript'> 
    $(document).ready(function() { 
    var currentuser = true; 
    var userName = <%= @user.name.to_json %>; 
    app.views.user_view.compTemplates(currentuser)}); 
</script> 
+0

謝謝,我想你做了什麼,並通過它作爲參數傳遞給compTemplates方法 - compTemplates(currentuser,用戶名) - 但thwne我在接收它的觀點做consolelog(用戶名),它表示用戶名(即已計算的實際用戶名,而不是變量userName)'未定義'。你能解釋爲什麼嗎? – BrainLikeADullPencil 2013-03-16 21:17:14

+0

你能確認@user是否有名字? ('print @ user.inspect')也許在模板中(不是腳本部分)?另外,你是否嘗試過'escape_javascript'?你能檢查物體嗎? '警報(JSON.stringify(用戶名))'。我們試圖找出它失敗的地方。 – AdamT 2013-03-16 21:23:18

+0

我這樣做var currentusername = <%= @ user.name%>;在show.html.erb頁面中,它說'Veronica'(@ user.name)在javascript控制檯中是未定義的。 – BrainLikeADullPencil 2013-03-16 22:35:36