Tôi muốn hiển thị Javascript API như một thư viện độc lập mà không gây ô nhiễm không gian tên chung của chúng. Tôi đã tạo ra các wrapper vì vậy tôi không gây ô nhiễm requireJS của riêng mình theo http://requirejs.org/docs/faq-advanced.html. Tôi đã đơn giản hóa những gì tôi có cho đến nay như dưới đây, nhưng tôi không chắc chắn nếu điều này là đúng cách hoặc nếu tôi nên làm điều đó một số cách khác.Cách chính xác để hiển thị mô-đun requireJS cho không gian tên chung là gì?
var MyApi = MyApi || {};
var MyApiRequireJS = (function() {
// require.js pasted here
return {requirejs: requirejs, require: require, define: define};
})();
(function(require, define, requirejs) {
require.config({
baseUrl: 'js/scripts',
waitSeconds: 30,
});
define('myapi', ['jquery', 'underscore'],
function($, _) {
$.noConflict(true);
_.noConflict();
function api(method, args, callback) {
// do stuff here
}
return {api: api};
}
);
require(['myapi'], function(myapi) {
MyApi = myapi;
});
}(MyApiRequireJS.require, MyApiRequireJS.define, MyApiRequireJS.requirejs));
trang web sử dụng thư viện này sẽ bao gồm một thẻ script tham khảo đoạn code trên và sau đó gọi các api sử dụng
MyApi.api('some_remote_method', {foo: 'bar'}, function(result) {
// handle the result
});
Bạn có nói rằng bạn không muốn 'require' và' define' nằm trong không gian tên chung, nhưng bạn vui vì 'MyApi' và' MyApiRequireJS' nằm trong không gian tên chung? Tôi có thể hỏi tại sao? –
Nhiều khả năng chúng có thể đang sử dụng 'require' và' define' hơn 'MyApi' trong không gian tên chung của chúng (' MyApi' không phải là var mà tôi sẽ sử dụng, chỉ cần sử dụng để đơn giản.) Tương tự facebook kết nối api chỉ gây ô nhiễm không gian tên toàn cầu với 'FB'. –
Họ có sử dụng 'require' hoặc' define' không? Bạn có thể tìm ra? Nếu không, không có vấn đề gì. Nếu bạn không biết không gian tên toàn cầu của họ sử dụng, thì bạn không thể chắc chắn rằng bất kỳ hình cầu nào bạn xác định sẽ không được sử dụng. –