2011-03-04 13 views
0

jeditable(gem "on_the_spot"を使用)を更新した後でページを更新したい。以下はページを更新する作業ですが、スクリプトが実行されると、フィールドはもはやjeditableで更新できなくなります。Rails 3のヘルプjs

application.js

$('.on_the_spot_editing').change(function() { 
    $.getScript('edit.js'); 
}); 

edit.js.erb

$("#items .on_the_spot_editing").change(); 
$("#edit_order_form").html("<%= raw escape_javascript(render('form')) %>"); 

コントローラ

respond_to do |format| 
    format.html 
    format.js if request.xhr? 
end 

フィールド

<%= on_the_spot_edit item, :price %> 

EDIT -

$(document).ready(function(){ 
    $('.on_the_spot_editing').data('ok', 'Ok').live('click', function() { 
    // tried $.delay(800).getScript('edit.js'); 
    $.getScript('edit.js'); 
    }); 
}); 

EDIT 2 - データ-OKは= "OK" HTML5マークアップしている場合は、これは、ユーザーが "OK" ボタンをクリックしたかどうかを確認するために、正しいでしょうか?

$('.on_the_spot_editing').data('ok', 'Ok').live('click', function() { 
    setTimeout(getIt, 500); 
}); 

function getIt() { 
    $.getScript('edit.js'); 
} 

答えて

0

まず発言:あなたの内側edit.jsあなたはchangeイベントトリガーを再する必要がある理由私はかなり理解していませんか?ループを作成してはいけませんか?それは... a-ha!

フォームを再レンダリングするので、すべてのイベントバインディングが失われます。 live bindingsを使用してください。残念ながらjEditableは、liveバインディングを使用していません。おそらく、jEditableが書かれたときに存在しなかったと思われ、第2に、javascriptを使用して単一のフィールドを編集する場合、完全なフォームを再度レンダリングしたくないからです。

まだ完全なフォームを再レンダリングしたい場合、有効な場合があります(コントローラにコードが存在し、カウンタ/状態/何を更新しないか)。formビュー内にもう一度on_the_spot.jsをロードしてください。これによりフォームが再度有効になります。

これが役に立ちます。

+0

確かにあります。 "OK"データattrを探して更新されたスクリプト。問題は、jgetitableがDBに送信される前に.getScriptが呼び出され、次の編集まで更新が表示されないということです。私はスクリプトと.jsの両方で.delayを試みましたが、どちらもうまくいかないようです。 jeditableにスクリプトをトリガするために使用できるコールバックがあるのか​​、それとも何か他に何かできることがあるかどうか知っていますか? – pcasa

+0

2番目の編集を追加しました。それは正しいでしょうか? – pcasa

関連する問題