Я использую шаблон модуля в своем приложении Javascript и хочу перейти на RequireJS и AMD.
Моя текущая реализация выглядит так:
// Module main : Module.js
var myModule = (function(my, $, undefined) {
'use strict';
var m_privateMembers;
var m_stuff = new my.Pear({color:"green"});
//---------------------------------------
function privateFunctions(args) {
}
//-----------------------------------
my.publicFunctions = function(args) {
};
return my;
})(myModule || {}, jQuery);
// Module class Fruit : Module.Fruit.js
var myModule = (function(my, $, undefined) {
'use strict';
my.Fruit = Object.makeSubclass();
my.Fruit.prototype._init = function() {
};
my.Fruit.prototype.someClassFunction = function() {
};
return my;
})(myModule || {}, jQuery);
// Module class Pear : Module.Pear.js
var myModule = (function(my, $, undefined) {
'use strict';
my.Pear = Fruit.makeSubclass();
my.Pear.prototype._init = function(args) {
this.m_someClassMember = args;
};
my.Pear.prototype.someClassFunction = function() {
};
return my;
})(myModule || {}, jQuery);
В моем index.html я использую html-теги script для включения файлов разных модулей, и все работает нормально.
Мой вопрос:
1/ Почему система RequireJS лучше, чем эта система с несколькими тегами script?
С моим текущим подходом RequireJS:
define(['jquery'], function($) {
var myModule = (function(my, $, undefined) {
'use strict';
var m_privateMembers;
var m_stuff = new my.Pear({color:"green"});
//---------------------------------------
function privateFunctions(args) {
}
//-----------------------------------
my.publicFunctions = function(args) {
};
return my;
})(myModule || {}, $);
return myModule;
});
2/ Как я могу перейти на модули RequireJS и сохранить одноэлементный шаблон, который мои фактические модули предоставляют со встроенными подклассами?
очевидно, есть несколько проблем:
2.1/ *m_stuff не может создать экземпляр my.Pear, и я не знаю, как разделить модули на несколько файлов с помощью require ?*
2.2/ Если у меня есть два других модуля, которые оба зависят от myModule, будет ли переменная myModule var одним и тем же экземпляром в этих модулях (поскольку myModule больше не находится в глобальной области видимости)?
изменить: эта краткая схема иллюстрирует, что мне нужно сделать, в гораздо более сложной структуре: