繁体   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