ruby-on-rails - best_in_place-在 View 中使用更新的值

标签 ruby-on-rails best-in-place

我有一个主意和一个问题,似乎找不到答案或解决方案。
一些信息,如果以后需要或有帮助的话:

  • Rails版本3.2.9
  • best_in_place(git://github.com/straydogstudio/best_in_place.git)
  • Ruby 1.9.3p327

  • 好的,所以我有设置页面,在这里我可以使用best_in_place gem通过编辑单个设置来更新它们。工作良好。对此感到满意。

    有些设置是相互关联的,这意味着我必须对它们进行求和或减去。
    作为对用户有用的提示,在我看来,在该设置的就位表单旁边也有一个计算值。

    现在,当然,我希望看到该值与属性本身一起被更新。
    我找不到办法。

    如果我使用:data =>做到这一点,但我得到的是旧值而不是新值,因此我的观点总是“落后1步”。

    我也尝试使用update.js.erb和_test.html.erb部分,但javascript文件不起作用。好像它不存在。我有两次,三次检查放在哪里,还可以(app/views/controller/_partial.html.erb)

    所以。一个非常简单的问题是;我如何访问更新后的值并在 View 中使用它来更新计算。我个人认为我应该使用局部文件和js文件-但是我不知道为什么未拾取JS文件。有什么想法吗?

    如果还有其他选择,我将不胜感激。

    谢谢!

    -编辑(已添加代码)

    看法:
    <td>
      <%= best_in_place @s,:pay_after_bonus, :display_with => :number_to_percentage, :type => :input, :nil => "Klikni tu za spremembo!", :cancel_button=> "Prekliči" %>
      Cena: <span id="test"><%= number_to_currency(@s.family_member_price - ((@s.pay_after_bonus * @s.family_member_price)/100)) %></span>
    </td>
    

    settings_controller.rb:
    def update
      @s = Setting.find(params[:id])
    
      respond_to do |format|
        @s.update_attributes params[:setting]
       @s.create_activity :update, :params => { :setting => params[:setting].keys.first }, owner: current_user
       format.json { respond_with_bip(@s) }
       format.js
     end
    end
    

    update.js.erb:
    $( "#test" ).html( "<%= escape_javascript( render( :partial => "update") ) %>" );
    

    _update.html.erb:
    <strong>Test</strong>
    

    -编辑2:

    好的,显然可以像我这样想做一些事情:
    $('.best_in_place[data-attribute="model_attribute"]').bind(
    "ajax:success", function(event, data) {
        // function that will update whatever
    });
    

    与...结合
    // respond to json request with
    render :json => {"model" => @model}
    


    "ajax:success", function(event, data) {
    var result = $.parseJSON(data);
    // from here the result var will be accessible with all the data returned by the controller.
    // result.model is your object - use result.model.attribute  to get specific values...
    }
    

    但这对我来说结束了。
    我不知道如何使用render:json => {“model” => @model},因为它必须与format.json {response_with_bip(@s)}结合使用。

    我应该在 Controller 中的哪里放置渲染?
    目前,我收到500个内部服务器错误,试图以此作为响应。

    我已经找到了解决方案here

    谢谢!!

    最佳答案

    在ajax回调中,您可以发出另一个请求以获取所需的部分内容:

    $('.best_in_place.myclass').bind("ajax:success", function () {
      $.getScript("http://www.someurl.com");
    });
    

    然后在该操作中,渲染一个JS文件(例如show.js.erb),在其中将目标元素替换为渲染结果:
    $("#div-<%= @div.id %>").replaceWith("<%= escape_javascript(render(partial: 'some/partial', :layout => false)) %>");
    

    关于ruby-on-rails - best_in_place-在 View 中使用更新的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15295571/

    相关文章:

    javascript - Best In Place 不是一个功能 Rails 5

    ruby-on-rails - best_in_place gem 初始化

    ruby-on-rails - Ruby on Rails 中身份验证的最佳解决方案

    ruby-on-rails - 为什么我本地编辑的 gem 中的某些方法没有出现在我的 Rails 控制台中?

    ruby-on-rails - 按返回整数的模型方法进行扫描排序

    ruby-on-rails - 在 AJAX 请求期间使用 js 禁用所有 best_in_place 字段

    ruby-on-rails - 在 Rails App 中使用 secret 密码

    ruby-on-rails - Rails 中的定时页面缓存

    ruby-on-rails-4 - Best_in_place 集合 1 对多关联

    jquery - 如何在完成 best_in_place 编辑后触发事件?