2012-03-15 34 views
7

Một mô hình chung cho các mẫu bốc xương sống là một cái gì đó như:đọc nội dung của thẻ script bên ngoài với jquery

<script type='text/template' id='foo'> 
    my template 
</script> 

---- 
var whatever = $('#foo').html(); 

tôi muốn bao gồm các kịch bản trong một tập tin bên ngoài như vậy:

<script type='text/template' id='foo' src='myTemplate.tpl'></script> 

Nhưng html() của foo hiện đang trống.

Tôi đã xem trình duyệt kéo tệp mẫu xuống, nhưng tôi không chắc liệu nó có nằm trong trang dom hay không. Có cách nào đơn giản để tham khảo nội dung của tập lệnh trong javascript hay trình duyệt đơn giản bỏ qua nó và ném ra kết quả?

+1

bạn đã thử thực hiện trên tài liệu chưa? – mindandmedia

+0

Có, mọi thứ đang chạy tốt sau khi đã có tài liệu.ready – captncraig

+0

Từ quan điểm tối ưu hóa, trang của bạn sẽ tải nhanh hơn nếu các mẫu nội tuyến hoặc được khai báo dưới dạng biến javascript. Tải mọi tài nguyên bên ngoài trên trang của bạn sẽ phải trả phí HTTP. Bạn ít nhất nên sử dụng 'defer' hoặc 'async' trên chúng để trình duyệt biết rằng nó có thể tải chúng cùng với mọi thứ khác và không phải chặn – tkone

Trả lời

2

Tôi nghĩ rằng để thực sự thực thi kịch bản được tải bên ngoài, bạn phải thực hiện eval() của nội dung. Bạn không thêm nó vào DOM thực sự vì nó là kịch bản lệnh, bạn đang thêm nó vào thời gian chạy JS. Có thể có những cách khác để làm điều đó nhưng eval() thường được coi là một lỗ hổng bảo mật vì mã độc hại có thể được đánh giá.

Điều tôi có xu hướng làm là tạo các phần mẫu trên máy chủ để tôi biết tất cả JS của mình đều có khi DOM sẵn sàng.

+0

Tôi nghĩ rằng tôi có thể cần phải đi tuyến đường này, và chỉ có máy chủ spew nội dung tập tin nội tuyến. – captncraig

+0

Chỉ cần cẩn thận nếu các mẫu của bạn có mã được rút gọn trong chúng. Hãy nhận biết cách chương trình phụ hiển thị HTML/JS. Tôi đã có một số vấn đề sôi nổi với cách các phần phụ trợ khác nhau giải thích khoảng trắng và các dấu ngắt dòng trong quá trình hồi quy. Chỉ cần một cảnh báo trong trường hợp bạn bắt đầu nhận được bối rối bởi các lỗi lạ. – FlavorScape

1

Nếu điểm đang thực hiện một hành động ngay sau khi tập lệnh được tải, bạn có thể đặt thuộc tính onload trên thẻ tập lệnh. Nếu bạn muốn tải xuống nội dung trong thời gian chạy, thì bạn có thể sử dụng chiến lược tải xuống không đồng bộ (như Gats chỉ). Điều quan trọng cần lưu ý một số điểm quan trọng khi sử dụng mẫu cho các mẫu jquery trong các tệp bên ngoài, có một thú vị article về các mẫu jquery với các tệp bên ngoài, bạn phải kiểm tra nó.

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