วิธีโหลดการพึ่งพาจาวาสคริปต์ด้วย turbolinks

ในแอปพลิเคชัน Rails ฉันใช้ turbolinks และ jquery-turbolinks ฉันมีการพึ่งพาจาวาสคริปต์จำนวนมาก เช่น dataTables ก่อนอื่น ฉันกำลังโหลดการขึ้นต่อกันทั้งหมดบน application.js แต่สุดท้ายแล้ว ฉันมีไฟล์ขนาดใหญ่ใน 1Mo หลังจากการคอมไพล์ล่วงหน้า ดังนั้นฉันต้องการโหลดการขึ้นต่อกันเมื่อจำเป็นเท่านั้น

ฉันสร้างไฟล์ชื่อ custom-datables.coffe โดยมีเนื้อหานี้:

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

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

ฉันรวมมันไว้แบบนี้:

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

และฉันใช้จาวาสคริปต์ที่ส่วนท้ายของเค้าโครงแอปพลิเคชันของฉัน

มันใช้งานได้เมื่อฉันรีเฟรชเพจ แต่เมื่อฉันไปที่เพจนี้โดยใช้เทอร์โบลิงก์ ฉันเห็นได้ว่า $('.data-table').dataTable นั้นไม่ได้ถูกกำหนดไว้ เมื่อฉันพิมพ์ $('.data-table').dataTable ในคอนโซลของ firefox ฟังก์ชันจะถูกกำหนด ดูเหมือนว่า $(document).ready จะถูกทริกเกอร์ก่อนที่ DataTable จะโหลดเสร็จสมบูรณ์

มีวิธีแก้ไขหรือไม่? เป็นวิธีปฏิบัติที่ดีที่สุดในการโหลดการขึ้นต่อกันจำนวนมากหรือไม่?


person Dougui    schedule 30.11.2014    source แหล่งที่มา


คำตอบ (1)


เมื่อใช้ turbolinks คุณควรใช้เหตุการณ์ page:change แทนที่จะเตรียมเอกสารให้พร้อม

ดังนั้นในกรณีของคุณ:

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

โดยทั่วไปฉันชอบไฟล์ application.js ขนาดใหญ่เพียงไฟล์เดียว เพราะหลังจากโหลดครั้งแรก ไฟล์นั้นจะถูกแคชไว้ในเบราว์เซอร์ไคลเอนต์ของคุณ นอกจากนี้ในการผลิตมันจะถูกย่อขนาดและบีบอัดด้วย

person nathanvda    schedule 30.11.2014
comment
การดำเนินการจะไม่ถูกทริกเกอร์ ปัญหาไฟล์ใหญ่ไฟล์เดียวโหลดนานเกิน หน้าของฉันใช้เวลาโหลด 20 วินาที และฉันกำลังมองหาวิธีเพิ่มความเร็ว - person Dougui; 30.11.2014
comment
ไม่เคยกระตุ้นเหรอ? ที่แปลก. คุณมีข้อผิดพลาดจาวาสคริปต์หรือไม่? คุณใช้เทอร์โบลิงก์เวอร์ชันใด (แม้ว่าฉันค่อนข้างแน่ใจว่าเหตุการณ์นี้ถูกเรียกเช่นนั้นเสมอ) คุณแน่ใจหรือไม่ว่าเบราว์เซอร์ของคุณมีโค้ดจาวาสคริปต์ใหม่ - person nathanvda; 30.11.2014