当用户点击我的应用中的复选框时,我通过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>
从上面的代码点击我的复选框(点击事件)后?
答案 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}) %>");
我希望这有帮助。 如果您需要更多解释,请告诉我。
此致