1

来自索引页面的CRUD 。

我知道有一些宝石可以让这件事变得简单,但如果可能的话,我想避免。

在 Index.html.erb
上 - 在 index.html.erb 上将 _newsfeeds 部分渲染到 <ul id="feedsNews" >
- 部分表单(:Create 和 :Edit 使用相同的表单)
- 当用户在新闻源上单击“编辑”按钮时,我将部分表单附加到新闻源

问题
正在编辑/更新更改...不幸的是,我似乎无法获得 ajax:success 以重新加载 index.html.erb 上的 _newsfeeds 部分。如果这是愚蠢的事情,我道歉......

NEWSFEEDS_CONTROLLER

    def index
      @newsfeeds = Newsfeed.all
      @newsfeed = Newsfeed.new
      @newsfeeds = Newsfeed.order("position") #for Sortable

      respond_to do |format|
        format.html # index.html.erb
        format.json { render json: @newsfeeds }
        format.js
      end
    end

    def update
      @newsfeed = Newsfeed.find(params[:id])

      respond_to do |format|
        if @newsfeed.update_attributes(params[:newsfeed])
          format.html { redirect_to newsfeeds_url, notice: 'Updated' }
          format.json { head :no_content }
        else
          format.html { render action: "edit" }
          format.json { render json: @newsfeed.errors, status: :unprocessable_entity }
        end
      end
    end

index.html.erb

    <div>
        <div id="spinner" style="display:none;"></div>
        <ul id="feedsNews" class="showList" data-update-url="<%= sort_newsfeeds_url %>" >
            <%= render :partial => @newsfeeds %>
        </ul>
    </div>

index.js.erb

    $('#<%= dom_id(@newsfeed, :edit) %>')
        .bind('ajax:send', function(){
           $('#spinner').show();
        })
        .bind('ajax:success', function() {
           $('#spinner').hide();
           $('#feedsNews').innerHTML ('<%= escape_javascript(render(@newsfeeds)) %>')
        })

任何帮助将非常感激。

- - - - - - - - 更新 - - - - - - - - - -

把它改成这个,它可以工作......排序...... index.js.erb 似乎在更新操作重定向之前触发,所以萤火虫给了我一个无尽的'spinner' index.js.erb获取请求

    $.ajax({
    complete: function() {
    $('#feedsNews').html('<%= escape_javascript(render :partial => @newsfeeds) %>');
    alert('Changes Saved!');
}

});

4

1 回答 1

2

我不认为让 Rails 做这种工作是个好主意(通过 ajax 刷新部分)。因为你必须同时编写 Ruby 和 js 代码。

这项工作只能由 jQuery 完成。例如发送 ajax 请求,然后update action在回调中调用,例如

$.ajax({
  url: 'ajax/test.html',
  success: function(data) {
    $('.result').html(data);
    alert('Load was performed.');
  }
});
于 2012-11-03T06:14:32.887 回答