2013-08-01 48 views
9

Tôi sử dụng require.js để tải chậm cho một ứng dụng Javascript. Tôi rất thích chuyển sang một ngăn xếp thiên thạch nhưng ngay bây giờ có vẻ như Meteor sẽ gửi toàn bộ ứng dụng (tất cả các mẫu) qua tải ban đầu. Có ai đã thành công với require.js và meteor hay bất kỳ triển khai nào khác không?Các mẫu tải Lười biếng trong Meteor

Trả lời

5

Bạn đang đặt các câu hỏi khác nhau, nhưng chắc chắn chúng được kết nối. Đầu tiên là tải thêm javascript mã vào số sao băng ứng dụng của bạn. Tất nhiên bạn có thể sử dụng những thứ như requirejs. Điều này sẽ hoạt động tốt khi giả sử mã lười của bạn nằm trong thư mục public của dự án sao băng của bạn. Tuy nhiên, kinh nghiệm của tôi là requirejs phát điên khi nội dung của public được cập nhật thường xuyên, ví dụ như trong môi trường phát triển. Có lẽ đó là vấn đề tùy biến thư viện, nhưng tôi thà khuyên bạn nên sử dụng một số gói homebrewed nhẹ. Hãy xem here, nếu bạn cần một số nguồn cảm hứng.

Câu hỏi thứ hai là định nghĩa mẫu lười. Mỗi mẫu bao gồm hai phần. Đầu tiên là mã html của bạn, được viết bằng cú pháp handlebars, thứ hai là tất cả mã javascript mà bạn viết để xác định cách hoạt động của mẫu (ví dụ: trình trợ giúp, trình xử lý sự kiện). Phần thứ hai rất dễ, miễn là chúng ta đã biết cách tải mã lười (xem đoạn trên) và mẫu, hãy gọi nó là myLazyTemplate, đã được xác định, vì vậy về cơ bản, nói Template.myLazyTemplate không phải là undefined. Vậy làm thế nào để đạt được thứ hai?

Để xác định động mẫu mới, bạn cần phải gọi Template.__define__(name, raw_func) trên máy khách. Vì vậy, câu hỏi cuối cùng là "raw_func là gì?". Đây là một phiên bản biên soạn của html mã của bạn mà thường được tạo ra tự động trên máy chủ và sau đó được gửi xuống dây cho khách hàng khi ứng dụng được nạp (xem here để xem làm thế nào nó được thực hiện trong sao băng). Nhưng chúng tôi muốn làm điều đó một cách năng động, đúng không?

Vì vậy, ý tưởng là biên dịch mã mẫu theo cách thủ công với trợ giúp của quy trình Handlebars.to_json_ast. Bạn có thể cung cấp mẫu với mã mẫu html và đầu ra là một số javascript mảng có thể được gửi cho khách hàng bất kỳ lúc nào theo phương pháp mà chúng tôi đã nói đến. Điều cuối cùng bạn cần làm là gọi Handlebars.json_ast_to_func trên máy khách, sử dụng dữ liệu được gửi từ máy chủ làm đối số duy nhất. Đầu ra được sản xuất bởi Handlebars.json_ast_to_funcraw_func bạn có thể sử dụng để tạo mẫu myLazyTemplate.

Tôi biết rằng đây chỉ là ý tưởng thô, chứ không phải giải pháp toàn bộ cho vấn đề của bạn. Tôi hy vọng điều này sẽ giúp bạn tìm ra giải pháp cuối cùng cho riêng bạn.

+0

Cảm ơn câu trả lời rất chi tiết, đó chỉ là mức mô tả tôi đang tìm kiếm. – James

+1

Câu trả lời này có thể đã lỗi thời. Xem [cách tải các mẫu tải theo yêu cầu trong Meteor] (https://stackoverflow.com/a/28334315/1269037) và các gói có sẵn cho đến tháng 2 năm 2015. –

Các vấn đề liên quan