簡體   English   中英

當用戶單擊div時,如何將變量傳遞給加載的局部變量?

[英]How can I pass a variable to a partial that is loaded when user clicks on a div?

我正在嘗試在用戶單擊div元素時加載部分內容。 我的問題是我想將變量傳遞給此局部變量,而我找不到方法。

我寫了以下代碼:

<script>
$(".conversation").click(function() {
<% @conversationId = capture do %>
<%= javascript_tag "$(this).attr('id');" %>
<% end %>
$("#conversation").html("<%= escape_javascript(render(:partial => 'conversations/conversation_home', :locals =>{:conversation => Conversation.find_by_id(@conversationId)} )) %>");
});
</script>

我正在嘗試初始化varialbe(@conversationId),然后使用它將我想要的對象傳遞給局部對象。 當我加載頁面時,它也會嘗試加載部分頁面(為什么?我沒有單擊任何地方),並且由於對話為nil,所以我得到了“ nil:NilClass的未定義方法'subject'”。 如果我將@conversationId替換為值,則會正確初始化對話。

為什么在加載頁面時而不是在單擊div之后呈現部分視圖? 我可以正確初始化@conversationId嗎?

我可以采取另一種方法嗎?

頁面加載時, <%%>之間的所有內容都會得到評估。 多數民眾贊成在預期的行為,這就是為什么您的部分頁面加載時加載。

使用AJAX

我會親自使用AJAX。 這就是我要做的。

在HTML中 (為每個具有id會話添加div)

<div class="conversation" data-conversation-url="<%= conversation_path(:id => 1) %>">Get Conversation</div>

用Javascript (我將其放在單獨的文件中)

    $(document).on('click', '.conversation', function() {
        $.get({
            url: $(this).data('conversation-url'),
            success: function() {
              // do something here
            },
            failure: function() {
              // do something here
            }
        });
    });

在對話中

    def show
        @conversation = Conversation.find(params[:id])
    end

在views / conversations / show.js.erb中

$("#conversation").html("<%= escape_javascript(render(:partial => 'conversation_home', :locals =>{:conversation => @conversation} )) %>");

這應該可以解決問題。

請注意,這是假設您已經為conversation_path設置了路由。 另外,這只是一個示例代碼。 您將不得不對其進行修改以滿足您的需求,添加錯誤處理,並且可能會根據所使用的jQuery和Rails的版本來更改某些代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM