にある次のコードを見てください_form.html.erb
。
<script>
function typeCatch(){
$.post("<%= update_readers_link_essay_path(@essay) %>");
$(this).off("keypress", typeCatch);//remove handler
}
$(function(){
("form#new_revision").on("keypress", typeCatch);
});
</script>
ユーザーがフォームへの入力を開始すると、ajax リクエストが起動され、リーダー リストが更新されます。ただし、フォームへの入力を開始しても投稿リクエストが発生せず、この問題をデバッグしようとしています。
私はまだjavacsriptに精通していないので、いくつかのことを明確にするのを手伝っていただければ幸いです。
を。2 番目の部分については、できますか
$("form#new_revision").on("keypress", typeCatch);
でラップせずに$(function() {}
?
b. 私が間違っていることはありますか?ajax 呼び出しが発生しないので、2 番目の部分で間違いを犯したのでしょうか?
追加の質問
my_personal_chat.js (app/assets/javascripts パイプライン内)
$(function() {
var pusher = new Pusher('app_key');
var channel = pusher.subscribe('presence-my-chat');
channel.bind('pusher:subscription_succeeded', function(members) {
$('#online_users').empty();
members.each(function(member){
addMember(member);
});
... other functions ...
});
これが、Pusher を使用してチャット機能を実装した方法です。チャネルはプライベートであるため、 を呼び出すたびに へvar channel
の ajax 呼び出しPOST /pusher/auth
が呼び出されます。
チャット機能がない場合でも、別のページに移動するたびにPOST /pusher/auth
が呼び出されることがわかりました。基本的に、ロードされるたびmy_personal_chat.js
に ajax 呼び出しが不必要に呼び出されます。
質問: これを防ぐにはどうすればよいですか? my_personal_chat.js は、 に移動したときにのみロードする必要がありmyapp.com/chat
ます。JavaScriptファイルからすべてを取り出して中に入れるべきchat.html.erb
ですか?それが従来のやり方ですか?
自分の質問に答えるために:コードを から に移動し、my_personal_chat.js
をchat.js.coffee
削除しmy_personal_chat.js
ました。これで、JavaScript は、ユーザーがチャット ページに移動したときにのみ読み込まれます。