2012-03-21 14 views
8

Sadece RequireJS ile başladı, ama ben böyle içinde iki tanımlarınızı(), olan bir js dosyası kullanmak isteyen kısmında şaşırıp:requirejs, tek bir dosyada iki sınıfları

dosya adı:

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

O 2 param buluyor, inci: Ben de otomatik RequireJS framework tarafından yüklenen bir ön yükleme alanı, js dosyası var

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

test.js e 'test' dosyası. Yalnızca, 'null' değerini döndürür. 'Test2' bulamıyor çünkü 'test2.js' adlı bir dosya aramaya çalışıyor. Aslında ben böyle bir şey yapmak istiyorum:

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

Ama yine de, ben her iki nesnelere bir işleyici almak istiyorum

. Neyi yanlış yapıyorum??

+0

taneciklik dosya düzeydedir. Bir dosyanın bölümlerini içe aktaramazsınız. Sadece "test.js" dosyasını içe aktarın ve her iki nesneyi de alırsınız. – Pointy

+0

@Pointy Sonra kodumda hala bir sorun var çünkü 'test' boş bir nesne döndürüyor. – w00

+0

Ah ... RequireJS belgelerine göre, herhangi bir belirli .js dosyasında sadece bir ** modül olmalıdır. – Pointy

cevap

16

Bunun gibi iki farklı modülü veremezsiniz. Eğer 'test' arasında "submodüller" olarak tutmak istiyorsanız, doğru yolu yapmak olacaktır:

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

Sonra yapabilirsiniz:

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

Orada tanımlanmış iki altmodem varsa ve kodumdaki modüllerden yalnızca birini kullanırım. R.js optimize edici sadece modüllerden birini nihai derlenmiş dosyaya yükler mi? – Skurpi

İlgili konular