在json更新后,Rails3用js响应

时间:2011-04-14 00:25:22

标签: ruby-on-rails ruby-on-rails-3

使用http://blog.bernatfarrero.com/in-place-editing-with-javascript-jquery-and-rails-3/

gem使用json进行更新,但是如何触发update.js.erb来更新页面的不同部分?

EDIT 在发票页面中使用它。发票中的每个项目都有一个可以使用best_in_place更新的价格字段。

只有在字段成功更新后,我才需要更新订单项的总价格和发票到期金额。

结束了类似的事情:

 respond_to do |format|
        if @item.update_attributes(params[:item])
          format.html { redirect_to order_url(@item.order_id), :notice => "Successfully updated item." }
          format.js {  }
          format.json { head :ok } 

编辑best_in_place.js第175行

loadSuccessCallback : function(data) {
    this.element.html(data[this.objectName]);
        // Binding back after being clicked
    $(this.activator).bind('click', {editor: this}, this.clickHandler);
    if(this.objectName == "item") $.getScript('update.js'); // If its an item, call update.js.erb 
  },

3 个答案:

答案 0 :(得分:6)

我想用best_in_place pcasa做同样的事情。在当前版本(1.0.2)中,loadSuccessCallback函数触发ajax:success事件。这允许您在application.js中执行此操作:

$('.best_in_place')
    .best_in_place()
    .bind('ajax:success', function(e) {
        // do your post-json call magic
    });

答案 1 :(得分:0)

您是否尝试过以下方面的内容:

def update
  @user = User.find(params[:id])

  respond_to do |format|
    if @user.update_attributes(params[:user])
      format.html { redirect_to(@user, :notice => 'User was successfully updated.') }
      format.json { head :ok }
      format.js
    else
      format.html { render :action => "edit" }
      format.json  { render :json => @user.errors, :status => :unprocessable_entity }
    end
  end
end

我没有用教程中的代码对此进行测试,但想法是你必须告诉控制器方法加载Javascript文件。我不确定这将如何与重定向相互作用,但原则是正确的。

答案 2 :(得分:0)

您不需要查看update.js.erb。正如ezkl已经指出的那样,你需要将控制器的respond_to设置为json。此外,您需要在public / javascripts / application.js

中激活最佳位置
$(document).ready(function() {
  jQuery(".best_in_place").best_in_place()
});

并将其添加到您的视图中:

 <td><%= best_in_place task, :name, :type => :input, :nil => "Click to edit" %></td>

我在自己的网站上有一个关于Ajax和Prototype和JQuery的教程 - 而JQuery Part使用最好的就地:http://www.communityguides.eu/articles/15