2013-09-06 26 views
8

Nếu tôi có mô-đun không phải là AMD có tên old.js và bên trong tập lệnh này, tôi có hai hàm f1f2 được xác định. Tôi cần phải sử dụng chúng, làm cách nào để xuất cả hai?Chúng tôi có thể xuất nhiều chức năng không phải của AMD từ mô-đun trong requirej không?

require.config({ 
    paths: { 
     "jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min", 
    }, 
    shim: { 
     "old": { 
      deps: ["jquery"], 
      exports: ["f1", "f2"] 
     } 
    }, 
    urlArgs: "bust=" + (new Date()).getTime() 
}); 

Điều này sẽ không hiệu quả. Tôi sẽ gặp lỗi split. Tài liệu không đề cập đến nhiều (http://requirejs.org/docs/api.html#config-shim) Tôi giả định điều này là bởi vì ngay cả những ví dụ jquery là các tập tin cá nhân và họ có "nhập" chức năng/lớp.

Trả lời

12

Nói chung, nếu bạn muốn xuất nhiều hơn một đối tượng duy nhất từ ​​mô-đun, bạn ... vẫn cần phải xuất một đối tượng duy nhất. Các hình thức giữa các ý kiến ​​để đính kèm các chức năng của bạn đến một đối tượng xuất khẩu và trả lại rằng:

function f1() { ... } 
function f2() { ... } 

return { 
    f1: f1, 
    f2: f2 
}; 

Nếu đây là mã phi AMD, bạn có thể không có báo cáo kết quả return, nhưng bạn vẫn sẽ cần phải thêm các đối tượng xuất khẩu .

Có vẻ như recommended option cho mã cũ là chỉ chỉ định f1 trong thuộc tính exports, nhưng sau đó thực hiện thêm nữa trong hàm init. Có lẽ yêu cầu thực sự đang sử dụng thuộc tính exports để kiểm tra xem tệp có được tải hay không, vì vậy không quan trọng bạn có bao gồm tất cả các mục hay không. Giả sử f1f2 đều globals, bạn có thể có thể làm điều này:

shim: { 
    "old": { 
     deps: ["jquery"], 
     exports: "f1", 
     init: function() { 
      return { 
       f1: f1, 
       f2: f2 
      }; 
     } 
    } 
} 

này phải để cho phép bạn yêu cầu old và nhận được các đối tượng xuất khẩu, chứ không phải là f1:

require(['old'], function(old) { 
    old.f1(); 
    old.f2(); 
}); 
+0

Hmm Vâng họ không AMD nên chúng chỉ là các hàm javascript thông thường. Bạn đang nói tôi phải thêm mã phụ vào tập tin old.js? – CppLearner

+0

Xem các chỉnh sửa của tôi. Tôi nghĩ rằng đây là phương pháp được đề nghị, theo tài liệu, mặc dù tôi chưa thử nghiệm nó. – nrabinowitz

+0

Vâng cách tiếp cận đó hoạt động. Cảm ơn rất nhiều. Tôi quá buồn ngủ hoặc là bình luận tài liệu dưới '' init'' trong doc là quá khó hiểu? Tôi không thấy bất kỳ tham chiếu cụ thể nào về cách giải quyết vấn đề. Đọc toàn bộ phần khuôn mặt 3 lần. – CppLearner

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