2012-03-21 27 views
8

Tôi chỉ mới bắt đầu ra với RequireJS, nhưng tôi bị mắc kẹt ở phần nơi mà tôi muốn sử dụng một file js trong đó có hai định nghĩa() trong nó, như thế này:requirejs, hai lớp học trong một tập tin

filename: test.js

define('test1', ['jquery'], function() { 
    return { 
     method1 : function() { 
      console.log("test1 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test1 - method 2"); 
     } 
    } 
}); 

define('test2', ['jquery'], function() { 
    return { 
     method1 : function() { 
      console.log("test2 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test2 - method 2"); 
     } 
    } 
}); 

tôi cũng có một bootstrap, file js mà được tự động nạp bởi khuôn khổ RequireJS:

require(['jquery', 'test', 'test2'], function ($, t1, t2) { 
    console.log(t1); 
}); 

Nó tìm param thứ 2, thứ e 'kiểm tra' tập tin. Chỉ, nó trả về một 'null'. Nó không thể tìm thấy 'test2' vì nó cố gắng tìm một tệp có tên 'test2.js'. Trên thực tế, tôi muốn làm điều gì đó như:

require(['jquery', 'test.test1', 'test.test2'], function ($, t1, t2) { 
    console.log(t1); 
}); 

Nhưng dù sao, tôi cũng muốn xử lý cả hai đối tượng. Tôi đang làm gì vậy ??

+0

Các granularity là ở cấp tập tin. Bạn không thể nhập các phần của tệp. Chỉ cần nhập "test.js" và bạn sẽ nhận được cả hai đối tượng. – Pointy

+0

@Pointy Sau đó, vẫn có điều gì sai với mã của tôi vì 'test' trả về một đối tượng null. – w00

+0

Ah ... cũng theo tài liệu RequireJS, chỉ nên có ** một ** mô-đun trong bất kỳ tệp .js nào. – Pointy

Trả lời

16

Bạn không thể xuất hai mô-đun khác nhau như thế này. Nếu bạn muốn giữ chúng như là "submodules" của 'test', đúng cách sẽ làm:

define('test', ['jquery'], function() { 
    var exports = {}; 
    exports.test1 = { 
     method1 : function() { 
      console.log("test1 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test1 - method 2"); 
     } 
    }; 

    exports.test2 = { 
     method1 : function() { 
      console.log("test2 - method 1"); 
     }, 

     method2 : function() { 
      console.log("test2 - method 2"); 
     } 
    }; 

    return exports; 
}); 

Sau đó, bạn có thể làm:

require(['test'], function (test) { 
    var test1 = test.test1; 
}); 
+0

Nếu tôi có hai mô-đun con được xác định ở đó và tôi chỉ sử dụng một trong các mô-đun trong mã của tôi. Trình tối ưu hóa r.js sẽ chỉ tải một trong các mô-đun vào tệp được biên dịch cuối cùng? – Skurpi

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