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