2012-01-16 23 views
9

Tôi đang viết một số thử nghiệm cho một ứng dụng đang sử dụng RequireJS. Do ứng dụng hoạt động như thế nào, nó hy vọng sẽ nhận được một số lớp học thông qua gọi số require. Vì vậy, để thử nghiệm, tôi có một số lớp giả, nhưng tôi không muốn đưa chúng vào các tệp riêng lẻ chỉ cho bài kiểm tra này. Tôi muốn nhiều thích chỉ define() chúng bằng tay bên trong tập tin thử nghiệm của tôi như sau:Xác định mô-đun và sử dụng chúng ngay lập tức với RequireJS

define('test/foo', function() { 
    return "foo"; 
}); 

define('test/bar', function() { 
    return "bar"; 
}); 

test("...", function() { 
    MyApp.load("test/foo"); // <-- internally, it calls require('test/foo') 
}); 

Vấn đề ở đây là đánh giá của những mô-đun bị trì hoãn cho đến khi một sự kiện kịch bản onload là bắn.

Từ require.js around line 1600:

//Always save off evaluating the def call until the script onload handler. 
//This allows multiple modules to be in a file without prematurely 
//tracing dependencies, and allows for anonymous module support, 
//where the module name is not known until the script onload event 
//occurs. If no context, use the global queue, and get it processed 
//in the onscript load callback. 
(context ? context.defQueue : globalDefQueue).push([name, deps, callback]); 

Có một số cách tôi có thể tự kích hoạt các hàng đợi để được đánh giá?

Trả lời

0

định nghĩa mô-đun sẽ được giới hạn một lần cho mỗi tệp (xem here). tôi đoán rằng có nhiều mô-đun được xác định trong một tệp đơn sẽ phá vỡ các cơ chế tải nội bộ, dựa vào sự kiện tải của tập lệnh để xác định rằng nó đã sẵn sàng trong khi giải quyết các phụ thuộc.

ngay cả khi nó chỉ để thử nghiệm, tôi khuyên bạn nên tách các định nghĩa đó thành nhiều tệp.

hy vọng điều đó sẽ hữu ích! cổ vũ.

+0

Bạn có thể thêm nhiều hơn một mô-đun cho mỗi tập tin (xem xét khi bạn tối ưu hóa + rút gọn toàn bộ ứng dụng của bạn), bạn chỉ cần cung cấp cho mỗi mô-đun một tên cụ thể (xem đối số chuỗi đầu tiên cho mỗi hàm 'define' trong OP). – nickf

+0

Ngoài ra, các mô-đun chỉ là để thử nghiệm và chúng ** rất ** cơ bản. Một chút phức tạp hơn trong ví dụ trên, nhưng không nhiều. Có mỗi trong tập tin riêng của mình sẽ là cách quá lộn xộn. – nickf

+0

chắc chắn, tôi hiểu. nhưng từ những gì tôi có thể nói từ các tài liệu, trường hợp duy nhất mà bạn có một tệp duy nhất có nhiều mô-đun là sau khi bước tối ưu hóa/xây dựng xảy ra. thành thật mà nói, tôi không quen thuộc với requirejs, nhưng tôi đã sử dụng nó trên một vài dự án. các tài liệu khá rõ ràng mặc dù: 'Chỉ nên có * một * định nghĩa mô-đun cho mỗi tệp trên đĩa. Các mô-đun có thể được nhóm thành các gói được tối ưu hóa bằng công cụ tối ưu hóa. ' tôi sẽ bắt đầu ở đó :) – keeganwatkins

1

Điều tốt nhất tôi đã tìm thấy cho đến nay là không đồng bộ đòi hỏi các module:

define("test/foo", function() { ... }); 
define("test/bar", function() { ... }); 

require(["test/foo"], function() { 
    var foo = require('test/foo'), 
     bar = require('test/bar'); 
    // continue with the tests.. 
}); 
Các vấn đề liên quan