为了简单起见,我有一个更新部分的表单。那里没什么特别的。在部分中,我有一个 jQuery 可排序列表。在更新表单之前,我可以毫无问题地在列表中拖动东西。
但是,在我更新列表之后,就像 js 没有重新加载一样,我必须刷新整个页面才能让事情再次滚动。
我已经尝试了一切,甚至从 Ryan Bates Esq 借用了演示 jQuery 应用程序。这边。在我将一些 js shizzle 放入部分后,这也不起作用。
我敢肯定这很简单,但我是一个 ajax / jQuery 新手,我真的很挣扎。
看法:
#test_one
= render "test_one"
部分“test_one”
= form_for @location, :remote => true do |f|
%table
%tr= collection_select(:location, :type_ids, Type.all, :id, :name, {:prompt => true}, :multiple => true, :class=>"chzn-select")
%tr
%td
%ul#types.unstyled{"data-update-url" => sort_types_locations_url}
- @types.each do |type|
= content_tag_for :li, type do
%span.handle
[Drag]
= type.name
更新.js.erb
$("#test_one").html('<%= escape_javascript render("test_two") %>');
在我的控制器中:
def update
@location = Location.find(params[:id])
@types = @location.types.order('location_types.position').limit(2)
respond_to do |format|
if @location.update_attributes!(params[:location])
flash[:notice] = 'Settings updated successfully'
format.html { redirect_to edit_location_path }
format.js
else
format.html { render action: "edit_access" }
format.js { render action: "update_access_errors" }
end
end
end
最后在locations.js.coffee
jQuery ->
$('#types').sortable(
axis: 'y'
update: ->
$.post($(this).data('update-url'), $(this).sortable('serialize'))
)
更新有效,我没有收到任何错误,并且我的控制台中没有任何内容。现在我迷失了很多 - 我如何在更新记录后让 js 重新加载?