2012-11-16 40 views
9

Tôi tải ba tập lệnh trên trang web của mình và tôi muốn kích hoạt một chức năng khi hai người trong số họ đã tải xong.Có thể thực hiện chức năng ready() của Head JS chờ hai kịch bản không?

head.js(
    { webfont: 'http://ajax.googleapis.com/ajax/libs/webfont/1.0.31/webfont.js' }, 
    { jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' }, 
    { analytics: 'http://www.google-analytics.com/ga.js' } 
); 

Lý tưởng nhất là tôi muốn để có thể làm như sau, nhưng nó dường như không thể làm cho head.ready() chờ cho hai kịch bản để tải, theo documentation (xem Tổ chức Script).

head.ready('jquery', function() { 
    // Code that requires jQuery. 
}); 

// This is not supported. :-(
head.ready('jquery', 'analytics', function() { 
    // Code that requires both jQuery and Google Analytics. 
    // ... 
}); 

Vậy làm cách nào để giải quyết vấn đề này? Nếu tôi lồng các phương thức đã sẵn sàng, tôi có thể chắc chắn rằng mã của mình sẽ được kích hoạt hay không, nó sẽ chỉ được kích hoạt nếu jquery kết thúc tải trước phân tích?

head.ready('jquery', function() { 
    // Code that requires jQuery. 
    // ... 
    head.ready('analytics', function() { 
     // Code that requires both jQuery and Google Analytics. 
     // ... 
    }); 
}); 

Một giải pháp khác có thể là chia nhỏ báo cáo tải thành hai phần, như thế này. Nhưng liệu tôi vẫn sẽ được hưởng lợi hoàn toàn từ việc tải các tập lệnh không đồng bộ, hay nó sẽ kết thúc tải webfont trước khi jquery và phân tích?

head.js(
    { webfont: 'http://ajax.googleapis.com/ajax/libs/webfont/1.0.31/webfont.js' } 
); 

head.js(
    { jquery: 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' }, 
    { analytics: 'http://www.google-analytics.com/ga.js' }, 
    function() { 
     // Code that requires both jQuery and Google Analytics. 
     // ... 
    } 
); 

head.ready('jquery', function() { 
    // Code that requires jQuery. 
    // ... 
}); 
+0

Tôi không biết về HeadJS, nhưng tôi mong đợi các kỹ thuật như vậy để xử lý các cuộc gọi lồng nhau hoàn toàn tốt đẹp. Tương tự như vậy trong Java 'Process.join()' trên nhiều tiến trình đơn giản được gọi là one-after-the-other, bởi vì ngay cả khi thứ tự của quá trình hoàn thành khác với thứ tự các cuộc gọi 'join()', các tiến trình đã hoàn thành trước đó sẽ đơn giản là khiến 'join' trở lại ngay lập tức. Tôi mong đợi một cuộc gọi 'ready()' cho một thư viện đã được nạp sẵn để gọi lại ngay lập tức (hoặc trên dấu tick tiếp theo). –

+1

Các tài liệu và trang chủ hiển thị một số ví dụ rõ ràng về việc chờ nhiều tập lệnh tải. Bạn đang nhìn cái gì vậy? –

Trả lời

10

Kể từ khi kịch bản được thực hiện theo thứ tự (mặc dù được nạp song song), bạn có thể chờ đợi kịch bản đó là "last-in-line"

head.js(
    { webfont : 'http://ajax.googleapis.com/ajax/libs/webfont/1.0.31/webfont.js' }, 
    { jquery : 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' }, 
    { analytics: 'http://www.google-analytics.com/ga.js' } 
); 

head.ready('analytics', function() { 
    // when this triggers, webfont & jquery will have finished loading too 
}); 
+0

Bạn bắt gặp các từ cực kỳ chính xác: "Chúng tải song song nhưng thực thi theo thứ tự". 1 cho bạn. – iMatoria

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