2012-03-19 22 views
8

Onların genel ad alanını kirletmeden bağımsız bir kütüphane olarak bir JavaScript API açığa çıkarmak istiyoruz. Sarıcıyı yarattım, böylece kendi gereksinimlerini http://requirejs.org/docs/faq-advanced.html'a göre kirletmiyorum. Şimdiye kadar sahip olduğum şeyi basitleştirdim, ancak bunun doğru yol olup olmadığından emin değilim ya da başka bir şekilde yapmam gerekiyorsa emin değilim. daha sonra yukarıdaki kodunu referans bir komut dosyası etiketi içerir ve olurdu bu kütüphaneyi kullananBir requireJS modülünü genel ad alanına göstermenin doğru yolu nedir?

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)); 

Siteler kullanarak api

MyApi.api('some_remote_method', {foo: 'bar'}, function(result) { 
    // handle the result 
}); 
+0

Eğer genel ad alanında olmak 'require' ve' define' istemiyoruz söylüyorsun ama genel ad olmak 'MyApi' ve' MyApiRequireJS' için mutlu musun? Neden diye sorabilir miyim? –

+0

Onlar zaten require' ve 'global ad alanında MyApi'' den define' 'kullanıyor olabilir daha olasıdır (' MyApi' ı kullanmak için gidiyorum var değil, sadece basitlik için kullandık.) Benzer şekilde facebook connect api sadece global isim alanını 'FB' ile kirletir. –

+0

"require" veya "define" kullanıyorlar mı? Bulabilir misin? Değilse, sorun yok. Küresel ad alanının ne olduğunu bilmiyorsanız, tanımladığınız tüm globals'ın kullanımda olmadığından emin olamazsınız. –

cevap

0

sana senin sorunun yaparak başkasının sorunu tahmin çalışıyoruz düşünüyorum çağrı ama gerçekten makul bir şekilde yapabileceğinizi düşünmüyorum. Bağlamak sayfa farklı bir şeye RequireJS globalsi adlandırmak "define" zaten JavaScript globaller adında "iste" insanlara izin veya tasarlanmıştır için. Bağımlılıkları bağımsız olarak çözen iki ayrı RequireJS örneği oluşturması amaçlanmamıştır. MyAPI -

gerçekten ad kirliliğini en aza indirmek için çalışıyorsanız, söz konusu

, o zaman tam olarak bir ad göstermelidir. Özel bir RequireJS kopyasının yanı sıra API kodunuzu içeren bir canavar kapanışı yazın ve yalnızca API'nize açıklamak istediğiniz yöntemleri döndürmesini sağlayın.

O var muhtemelen çok dostça/daha basit iki sürümü, bir requireJS modülü tanımlar biri ve hiçbir requireJS bağımlılığı birinde API teslim etmek.

İlgili konular