rails从jquery加载请求加载部分

时间:2014-07-24 11:01:40

标签: jquery ruby-on-rails

当用户点击我的应用中的复选框时,我通过submit.rails发送远程表单。 现在div中有一个值,需要在表单发送后立即刷新。在研究了一下如何实现这一点后,我在我的jquery函数中找到了这个解决方案:

$( "input#my-checkbox" ).click(function() {
 $(this.form).trigger('submit.rails');
 $("#count-items").load();
});

这不起作用,因为load()函数需要加载某些东西,例如一个特定的观点。我无法将视图加载到我的div中,因此我创建了一个局部但不能正确渲染的视图。必须有一种更简单的方法来刷新我的div中的内容。

<div id="count-items"><%= render "pages/count_items" %></div>

以上也无法解释。部分不会在load()上呈现。

我怎样才能简单地重新加载div内容(foo),如下所示:

<div id="count-items"><%= foo %></div>

从上面的代码点击我的复选框(点击事件)后?

1 个答案:

答案 0 :(得分:1)

以下是我如何处理这种互动。 它可能不是唯一的解决方案,但它对我来说一直很好。 在您的视图中,当您希望通过ajax请求呈现某些内容时,还需要向服务器创建请求,服务器返回响应,并在所需的html节点中呈现该响应。

在视图中(我已经从coffeescript更新了它),让我们说你正在更新复选框计数器(url - &gt; / checkboxes / update_counter)

$("input#my-checkbox").click(function() {
    $.ajax(
        type: "POST",
        data: {key: 'value'}, //$(this.form).trigger('submit.rails'); should be handled here
       url: "/checkboxes/update_counter",
       dataType: "script",
       success: function(data){
           $("#count-items").update(data);
       }
    )
}

我真的不认为$(&#34; #count-items&#34;)。触发器(&#39; submit.rails&#39;)是必要的,你可以使用帖子传输你的数据。

在相应的控制器中,如果需要,您应该在respond_to块中定义format.js,如果没有定义respond_to,rails应该自动尝试检索 update_counter.js.erb

所以在您的控制器中(如果需要,不要忘记创建相应的路线):

...
def update_counter
    @new_count = do_update_counter
end
...
update_counter.js.erb 视图中的

$("#count-items").html("<%= escape_javascript(render "pages/count_items", locals: {new_count: @new_count}) %>");

我希望这有帮助。 如果您需要更多解释,请告诉我。

此致