9

私には、答えや解決策が見つからないように見えるアイデアと問題があります。後で必要な場合や役立つ場合の情報:

  • Rails バージョン 3.2.9
  • best_in_place (git://github.com/straydogstudio/best_in_place.git)
  • ルビー 1.9.3p327

わかりましたので、best_in_place gem を使用して編集することで個々の設定を更新できる設定ページがあります。正常に動作します。それで幸せです。

いくつかの設定は相互に関連しています。つまり、合計または減算する必要があります。ユーザーにとって役立つヒントとして、私の見解では、その設定のインプレース フォームのすぐ横に、計算された値もあります。

もちろん、この値が属性自体とともに更新されることを確認したいと思います。私はそれを行う方法を見つけることができません。

:data => でそれを行うと動作しますが、新しい値ではなく古い値を取得するため、ビューは常に「1 ステップ遅れ」ます。

update.js.erb と _test.html.erb の部分も試しましたが、javascript ファイルが機能しません。存在しないに等しい。どこに置くかを二重、三重にチェックしましたが、問題ありません (app/views/controller/_partial.html.erb)

そう。非常に簡単な質問は次のとおりです。更新された値にアクセスし、それをビューに戻して計算を更新する方法を教えてください。個人的には、部分ファイルと js ファイルを使用する必要があると思いますが、JS ファイルが選択されない理由がわかりません。それについて何か考えはありますか?

他のオプションがある場合は、ヒントをいただければ幸いです。

ありがとう!

--EDIT(コード追加)

見る:

<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:

OK、どうやら私がこのようにしたいようなことをすることは可能です:

$('.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 { Respond_with_bip(@s) } と組み合わせて行う必要があるためです。

コントローラーのどこにレンダリングを配置しますか? 現在、応答としてこれを実行しようとすると、500 の内部サーバー エラーが発生します。

私はここでこの解決策を見つけました。

ありがとう!!

4

3 に答える 3

1

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)) %>");
于 2014-08-11T20:49:15.880 に答える
0

jQuery を使用して、最適な場所に変更された要素の dom を解析し、そこから更新された値を取得できます。たとえば、このコード(haml)があります

= best_in_place @user, :name, :classes => 'name-edit'

次に、コールバックは次のようになります (coffeescript)

$('.name-edit').on 'ajax:success', (event, data, status, xhr) ->
  newValue = $('.name-edit').html # could also use .attr() here
  $('.some-other-widget').html(newValue) # again could also set .attr here

jQuery を使用して新しい値の検索をスキップすることもできます。コールバック ハンドラーのコンテキストでは、「this」は呼び出し元の要素を表すため、次のようにすることができます。

$('.name-edit').on 'ajax:success', (event, data, status, xhr) ->
  $('.some-other-widget').html this.innerHTML

その方法で他のウィジェットに新しい値を取得します。私の推測では、ajax ハンドラーによって返されるイベントにも currentTarget があり、これもまた ajax リクエストをトリガーしたウィジェットになります。これに関する私の唯一の懸念は、成功ハンドラーが何らかの形で最適なハンドラーを打ち負かし、更新される前にウィジェットを取得することです。私のテストでは、これまでに発生したことはありません。

于 2013-05-02T22:07:03.693 に答える
-1

私はちょうどそのような質問に答えました:

ここで答える

ただし、必要な値を挿入するだけでなく、必要な合計を使用する必要があります。

于 2013-04-11T17:09:06.693 に答える