QA@IT
«質問へ戻る

質問を投稿

【Rails4.0】Turbolinksの遷移後にイベントハンドラを有効にする方法のベストプラクティスは?

rails4.0にて、Turbolinks機能ではページリンクでの遷移後には、
body,titleタグのみ更新され、documentのready、loadイベンドが発生しないと知りました。

「id「command_id」を持つselectフォームの値が変わった時、buttonフォームをクリックする」
というイベントハンドラを実現する場合に、下記(最下部のコード)のように実装すると想定する動作を実現できました。

しかし、ページready後?の$(function(){});と、$(document).on('page:load', function(e) {});に同じ処理を記述することになるため、煩雑なコードに思えます。(前者は、#command_idのDOMが存在するページをロードした時のための記述で、後者は、別のページからTurbolinksのページ遷移にて#command_idのDOMがあるページに遷移した時のための記述です。)

ネットで調べてみると、jquery.turbolinksというgemで対処する方法があるようですが、gemを追加せずに、上記の動作を実現する場合には、
どうようなコーディングがよいのでしょうか。アドバイスをお願い致します。

(function() {
    function commandSearch(){
        $('#command_id').change(function(){
            $('#command_search_button').click();
        }); 
    };

    $(function() {
        commandSearch();

    });

    $(document).on('page:load', function(e) {
        commandSearch();

    });
})();

rails4.0にて、Turbolinks機能ではページリンクでの遷移後には、
body,titleタグのみ更新され、documentのready、loadイベンドが発生しないと知りました。


「id「command_id」を持つselectフォームの値が変わった時、buttonフォームをクリックする」
というイベントハンドラを実現する場合に、下記(最下部のコード)のように実装すると想定する動作を実現できました。


しかし、ページready後?の`$(function(){});`と、`$(document).on('page:load', function(e) {});`に同じ処理を記述することになるため、煩雑なコードに思えます。(前者は、#command_idのDOMが存在するページをロードした時のための記述で、後者は、別のページからTurbolinksのページ遷移にて#command_idのDOMがあるページに遷移した時のための記述です。)


ネットで調べてみると、jquery.turbolinksというgemで対処する方法があるようですが、gemを追加せずに、上記の動作を実現する場合には、
どうようなコーディングがよいのでしょうか。アドバイスをお願い致します。

```javascript
(function() {
	function commandSearch(){
		$('#command_id').change(function(){
			$('#command_search_button').click();
		});	
	};
	
	$(function() {
		commandSearch();
	
	});
	
	$(document).on('page:load', function(e) {
		commandSearch();
		
	});
})();

```