使用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
},
答案 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