2012-01-05 24 views
7

Thông thường bạn nạp trong một Backbone App sử dụng require.js trong tải trangLàm thế nào để khởi tạo ứng dụng xương sống của bạn trong vòng require.js sau gọi lại bên ngoài

<script data-main="js/main" src="js/libs/require/require.js"></script> 

mà tải một số phụ thuộc, và khởi chạy ứng dụng.

Nếu ứng dụng của bạn yêu cầu thao tác DOM, bạn có thể sử dụng plugin domReady

require(['domReady','app' ], function (domReady, App) { 
    domReady(function (App) { 
    App.Initialize() 
    }): 
}); 

Nhưng ứng dụng của tôi liên lạc với một API Flash. Tôi cần phải chờ cho đến khi plugin flash được thực hiện tải riêng của nó xml. Tôi bắn một cuộc gọi lại cho javascript khi điều này được thực hiện. Gọi lại này cần kích hoạt app.initialize() với các phụ thuộc như trong require.js

Phương thức đầu tiên và phương thức thứ hai (chờ đợi dom) không đảm bảo flash api có sẵn. Vậy làm thế nào tôi có thể khởi tạo ứng dụng, do đó app.js có các phụ thuộc của nó và api flash có sẵn. Hoặc xây dựng khác nhau: Làm thế nào tôi có thể khởi tạo require.js thông qua một sự kiện javascript/callback

Cập nhật: Rõ ràng, điều này sẽ đủ:

<script data-main="js/main" src="js/libs/require/require.js"></script> 
<script type="text/javascript"> 
    function init(){ 
     require(['framework/app'], function(App){ 
      App.initialize(); 
     }); 
    }  
</script> 

Các plugin flash chỉ có thể gọi window.init() để bắt đầu ứng dụng. Nhược điểm sẽ là những thứ như jQuery được nạp khi ứng dụng được khởi tạo. Điều này có thể dẫn đến sự chậm trễ nhỏ trước khi nội dung hiển thị.

tôi eonder nếu, khi tôi tải jquery vào đầu/kết thúc của cơ thể, require.js sẽ tải lại/khởi tạo một bản sao của jquery, hoặc đọc từ bộ nhớ cache/dom

Trả lời

0

Tôi không biết nhiều (thực sự bất cứ điều gì) về flash trong trình duyệt, nhưng nếu có một cách để phát hiện với JavaScript mà flash đã nạp:

  1. Hãy flash thay đổi một biến JavaScript toàn cầu
  2. Hãy flash thêm một thuộc tính đối với một số yếu tố

Sau đó, bạn có thể tạo một hàm JavaScript để kiểm tra điều kiện này (cứ 1 giây một lần) và khởi tạo ứng dụng sau khi kiểm tra được xác nhận. Sử dụng setInterval(function, time) để tạo chức năng này. Đảm bảo bạn xóa khoảng thời gian sau khi tải ứng dụng của mình, để đảm bảo nó không tải lại.

1

Bạn có thể tận dụng cấu hình requirejs shim, cho phép bạn xác định 'xuất' cho các mô-đun yêu cầu được chỉ định. xuất khẩu này sẽ là giá trị được lưu trữ trên bối cảnh toàn cầu và sẽ được cung cấp như chức năng gọi lại để sử dụng:

<script data-main="js/main" src="js/libs/require/require.js"></script> 
<script type="text/javascript"> 
    requirejs.config({ 
     shim: { 
      'framework/app': { 
       exports: 'App' 
      } 
     } 
    }); 
    require(['framework/app'], function(App){}); 
</script> 

Từ đây, mã của bạn mà các cuộc gọi trở lại một hàm javascript chỉ có thể gọi:

App.initialize(); 
+0

Cảm ơn bạn đã trả lời của bạn, mặc dù nó đã được hai năm :) Tôi không thể thực sự kiểm tra nó nếu nó hoạt động ngay bây giờ. – Jareish

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