Ajax 仅在 Ruby 应用程序中刷新时删除
Ajax only deletes upon refresh in Ruby app
我正在尝试在 Rails 中创建一个待办事项列表应用程序,该应用程序由许多待办事项列表组成,每个列表都有尽可能多的待办事项。当我尝试使用 Ajax 销毁已完成的待办事项时,我必须在它消失之前刷新页面。 我是Rails和Javascript的新手,所以任何想法将不胜感激。
这是我的项目销毁Javascript文件:
<% if @item.destroyed? %>
$('#item-' +<%= @item.id %>).hide();
<% else %>
$('#item-' +<%= @item.id %>).prepend("<div class='alert alert-danger'><%= flash[:error] %></div>");
<% end %>
调用项目部分的列表#显示视图:
%h1= @title
.row
.col-md-6
= render 'items/item', locals: {items: @items}
.row
.col-md-6
= render 'items/form', locals: {list: @list, item: @item}
= link_to "Edit", edit_list_path(@list), class: 'btn btn-success'
= link_to "Delete List", @list, method: :delete, class: 'btn btn-danger', data: { confirm: 'Are you sure you want to delete this to-do list?' }
- if @lists.nil?
= link_to "New To-do List", new_list_path, class: 'btn btn-success'
项目部分:
- @items.each do |item|
= item.name
= link_to "", [item.list, item], method: :delete, class: 'glyphicon glyphicon-ok', remote: true
%br/
项目控制器:
class ItemsController < ApplicationController
respond_to :html, :js
def create
@list = List.find(params[:list_id])
@item = @list.items.new(item_params)
@item.user_id = current_user.id
if @item.save
redirect_to @list, notice: 'Your new To-Do Item was saved!'
else
redirect_to @list, notice: 'You forgot to enter a To-Do item. Please try again.'
end
end
def destroy
@list = current_user.lists.find(params[:list_id])
@item = @list.items.find(params[:id])
@title = @list.title
if @item.destroy
flash[:notice] = "'"#{@item.name}'" was deleted successfully."
else
flash[:error] = "There was an error deleting the list."
end
respond_with(@item) do |format|
format.html {render [@list]}
end
end
def item_params
params.require(:item).permit(:name)
end
end
当单击 = link_to "", [item.list, item], method: :delete, class: 'glyphicon glyphicon-ok', remote: true
创建的链接时,您的应用会发送删除请求,但不会更改视图。您需要添加一个事件侦听器,用于捕获 ajax 删除请求成功并在视图中隐藏 item 元素。
这是实现此目的的粗略代码。我没有测试代码,但我认为你可以得到这个想法。
项目部分:
.item-container
- @items.each do |item|
.item
= item.name
= link_to "", [item.list, item], method: :delete, class: 'glyphicon glyphicon-ok', remote: true
.JS:
$(document).ready(function() {
$('.item-container').on('ajax:success', function() {
$(this).closest('.item').hide();
});
};
引用:
- http://api.jquery.com/on/
- http://tech.thereq.com/post/17243732577/rails-3-using-link-to-remote-true-with-jquery
- http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to-label-Options
顺便问一下,你把你发布的这段JavaScript代码放在哪里?我怀疑它曾经被执行过。
对 HAML 不是很熟悉,但看起来您没有在视图中添加ID
。您的destroy.js.erb
正在寻找像id=item-1
这样的选择器以隐藏它。因此,您的项目部分需要填充一个 id,以便以后找到它。在ERB,我会做:
<ul>
<% @items.each do |item| %>
<li id="item-" + item.id><%= item.name %> </li>
<% end %>
</ul>
类似的东西:)
相关文章:
- 如何在删除脚本后刷新/重新编译dom中的脚本
- 删除后ExtJS刷新成功
- ajax删除后刷新模板
- .addClass不工作(刷新时被删除)
- 删除注释而不刷新页面
- 正在删除数据(刷新)WebGL Globe
- 在不刷新的情况下无法删除最近创建的cookie
- 删除属性后刷新DOM,而不象chrome那样刷新页面
- Ajax 仅在 Ruby 应用程序中刷新时删除
- 删除导致页面刷新出现问题的查询参数
- 从数据表中删除行而不刷新整个页面
- 代码点火器 - 删除而不刷新页面
- 页面刷新后,工厂的值将被删除
- 页面在删除时不会在 jquery ajax 中隐式刷新
- 在 AngularJS 中删除对象后刷新 JSON
- 如何在不刷新的情况下删除动态创建的表行(最好使用标准的向左滑动动画)
- 在挖空.js中删除数据后刷新视图模型
- Ajax 调用删除和刷新列表不起作用
- 刷新时删除 DOM 元素
- 刷新/删除谷歌地图API上的标记