ソフトウェア/rails/Turbolinks5 のバックアップ差分(No.1)

更新


  • 追加された行はこの色です。
  • 削除された行はこの色です。
[[公開メモ]]

* Turbolinks が新しくなって、使いやすくなった・・・らしい? [#if2d008f]

Rails5 と合わせて Turbolinks が大幅に書き直されて、
ちまたでは使いやすくなったと評判みたいなのですが、
すでに古い Turbolinks を使っていた人向けの Migration Guide 
とか見つからずに困っています・・・

* バージョン判別法が分からない [#h334c9dd]

そもそも
- バージョン判定法が API に含まれていなかったり
- 互換性目的の Turbolinks.EVENTS が廃止されたり

古い Turbolinks はもはや無かったことにされているのはかなりひどい話

* バージョン判定方法 [#p8e3bdc0]

バージョン一覧:~
https://gemnasium.com/gems/turbolinks/versions

新しい Turbolinks には ChangeLog がない~
https://github.com/turbolinks/turbolinks/releases ~
これ見る限りものすごく若いライブラリなのに、いきなり Rails5 に標準採用とか思い切ったことするなあ

旧バージョン turbolinks-classic の ChangeLog:~
https://github.com/turbolinks/turbolinks-classic/blob/master/CHANGELOG.md

https://gist.github.com/saboyutaka/8727377 によれば、~
> TurbolinksはRails4.0からデフォルトで導入されたgem

そのときのバージョンは 2.2.0 ?

 LANG:javascript
 if(typeof Turbolinks !== 'undefined' && Turbolinks.supported) {
   // Turbolinks が有効になっている
   if(Turbolinks.EVENTS) {
     // for Turbolinks >= 2.4
   } else if(Turbolinks.pagesCached){
     // for Turbolinks < 2.4
   } else {
     // for Turbolinks >= 5.0
   }
 }

で合っているのかしら???

* 具体的には riot_rails を使いたかったのだけれど、 [#r1f2b861]

 LANG:javascript
    if (Turbolinks.EVENTS) {              // Turbolinks >= 2.4.0
      $(document).on('page:change', function(){
        riotRails.mountAll();
      });

      $(document).on(Turbolinks.EVENTS.BEFORE_UNLOAD, function(){
        riotRails.unmountAll();
      });
    } else if (Turbolinks.pagesCached) {  // Turbolinks < 2.4.0
      Turbolinks.pagesCached(0);
      $(document).on('page:change', function(){
        riotRails.mountAll();
      });

      $(document).on('page:receive', function(){
        riotRails.unmountAll();
      });

      if (window.ReactRailsUJS.RAILS_ENV_DEVELOPMENT) {
        console.warn('The Turbolinks cache has been disabled (Turbolinks >= 2.4.0 is recommended).');
      }
    } else {                              // Turbolinks >= 5
      document.addEventListener("turbolinks:load", function(){
        riotRails.unmountAll();
        riotRails.mountAll();
      });
    }

これでそこそこまともに動きそう?

Turbolinks 5 では BEFORE_UNLOAD にあたるイベントはなさそうなのだけれど、
load の際に unmountAll() → mountAll() してしまえば、どんな場合にも動くんじゃないのかな?

しばらくこれでやってみることにします。



Counter: 2535 (from 2010/06/03), today: 1, yesterday: 0