0

にある次のコードを見てください_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.jschat.js.coffee削除しmy_personal_chat.jsました。これで、JavaScript は、ユーザーがチャット ページに移動したときにのみ読み込まれます。

4

1 に答える 1

2

を。代替手段はありますが、コードをラップ$(function() {})することは、すべての要素が DOM に読み込まれるまでコードが実行されないようにするための最良の方法の 1 つです。jQueryの機能です。

b. ("form#new_revision").on("keypress", typeCatch);する必要があります$("form#new_revision").on("keypress", typeCatch);。最初にがありません$

于 2013-06-11T07:59:36.017 に答える