代码之家  ›  专栏  ›  技术社区  ›  hectorsq

使用Ajax更新行状态

  •  2
  • hectorsq  · 技术社区  · 17 年前

    我目前正在尝试用Rails编程我的第一个Ajax接口。

    应用程序当前显示一个用列表项填充的表。用户必须批准或拒绝每个列表项。我目前在每行的末尾都有一个编辑链接,显示了一个我可以在其中批准列表项的表单。

    我正在考虑使用复选框而不是编辑链接。当用户单击复选框时,我希望在不离开此页的情况下用状态、用户名和日期/时间更新数据库。

    1. 我应该遵循什么步骤?
    2. 我能用复选框还是 仅限于按钮?
    3. 我应该使用什么xxx_远程助手?
    4. 如何用Ajax调用的结果更新复选框状态?
    2 回复  |  直到 17 年前
        1
  •  5
  •   Andrew    17 年前

    我认为复选框不能正确控制您要查找的内容。 您说过希望用户能够批准或拒绝项目,这意味着您有三种状态:未处理、已批准和已拒绝。复选框仅支持两种状态:关闭和打开

    我将使用两个链接accept和reject,然后按如下方式执行。

    在你看来:

    ...
    <tr id="item1">
      <td>Accept or Reject</td>
      <td>
        link_to_remote 'accept', :action => :accept, :id => 1, :method => :post
        link_to_remote 'reject', :action => :reject, :id => 1, :method => :post
      </td>
    </tr>
    ...
    

    在你的控制器里

    def accept
      item = Item.find(params[:id])
      item.accept
      respond_to do |want|
        want.js {
          render :update do |page|
            page << "$('item_#{item.id}').cells[0].innerHTML = 'Accepted'"
            ...include other updates you need to make to your row...
            page.visual_effect :highlight, "item_#{item.id}"
          end
        }
      end
    end    
    ... similar for reject method ...
    
        2
  •  1
  •   Tomek Melissa    17 年前

    这是对安德鲁提出的解决方案的评论,

    我必须写下 link_to_remote 像这样的功能

    link_to_remote 'reject', :url => {:action => :reject, :id => item.id, :method => :post}
    

    另外,如果您使用的是RESTful资源,请记住向routes.rb添加新的操作。 即

    map.resources :items, :member => {:accept => :post, :reject => :post}