ruby on rails - rails在json更新后用js响应



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

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

编辑在发票页面中使用此方法。发票中的每个项目都有一个价格字段,可以使用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 line #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 
  },

我想对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
    });

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

中激活best-in-place。
$(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部分使用best-in-place: http://www.communityguides.eu/articles/15

您是否尝试过以下内容:

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文件。我不确定这将如何与重定向交互,但原则是正确的。

相关内容

  • 没有找到相关文章

最新更新