Cara memuat dependensi javascript dengan turbolink

Dalam aplikasi Rails, saya menggunakan turbolinks dan jquery-turbolinks. Saya memiliki beberapa dependensi javascript yang besar, seperti dataTables. Pertama, saya memuat semua dependensi tersebut di application.js tetapi pada akhirnya, saya memiliki file besar dalam 1 bulan setelah prakompilasi jadi saya ingin memuat dependensi hanya jika diperlukan.

Saya membuat file bernama custom-datables.coffe dengan konten ini:

#= require dataTables/jquery.dataTables
#= require datatables

$(document).ready ->
  console.log $('.data-table').dataTable

Saya memasukkannya seperti ini:

- content_for :javascript do
  = javascript_include_tag 'custom-datatables'

Dan saya menghasilkan javascript di akhir tata letak aplikasi saya.

Ini berfungsi ketika saya menyegarkan halaman tetapi ketika saya membuka halaman ini menggunakan turbolink saya dapat melihat bahwa $('.data-table').dataTable tidak terdefinisi. Saat saya mengetik $('.data-table').dataTable di konsol firefox, fungsinya sudah ditentukan. $(document).ready tampaknya dipicu sebelum datatable dimuat secara lengkap.

Apakah ada cara untuk memperbaikinya? Apakah ini praktik terbaik untuk memuat dependensi besar?


person Dougui    schedule 30.11.2014    source sumber


Jawaban (1)


Saat menggunakan turbolinks Anda harus menggunakan acara page:change, bukan dokumen yang sudah siap.

Jadi dalam kasus Anda:

$(window).bind 'page:change', () ->
  console.log $('.data-table').dataTable

Saya biasanya lebih suka file application.js yang besar, karena setelah dimuat pertama kali akan di-cache di browser klien Anda. Juga dalam produksi akan diperkecil dan dikompresi.

person nathanvda    schedule 30.11.2014
comment
Tindakan tersebut tidak pernah dipicu. Masalahnya dengan satu file besar yang membutuhkan waktu lama untuk dimuat. Halaman saya membutuhkan waktu 20 detik untuk dimuat dan saya sedang mencari cara untuk meningkatkan kecepatan. - person Dougui; 30.11.2014
comment
Tidak pernah terpicu? Itu aneh. Apakah Anda mengalami kesalahan javascript? Versi turbolink mana yang Anda gunakan (walaupun saya yakin acaranya selalu disebut seperti itu). Anda yakin browser Anda memiliki kode javascript baru? - person nathanvda; 30.11.2014