Я использую шаблон модуля в своем приложении Javascript, и я хочу перейти на RequireJS и AMD.Переход от простого шаблона модуля к требованию 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-теги сценария включить мои различные модули файлов и все работает нормально.
Мой вопрос являются:
1/Почему система RequireJS лучше, чем это многократным системы тегов сценария?
С моей нынешней 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, и я не знаю, как разделить модули в нескольких файлах с требуют *
2,2/? Если у меня есть два других модуля, которые оба зависят от myModule, будет ли myModule var одним и тем же экземпляром в этом модуле (поскольку myModule больше не находится в глобальной области)?
редактировать: это быстро схемы иллюстрируют то, что мне нужно сделать, в гораздо более сложной структурой:
Теперь я понял, что последнее, что я еще не понимаю, - это правильно использовать тот же возвращенный var в моих модулях, чтобы обернуть их в общее пространство имен, но он работает нормально. – Typedef
Нет необходимости использовать пространство имен с AMD. Идея состоит в том, чтобы сохранить все, что содержится в модулях, которые не относятся к глобальной области. –
Если я работаю над каркасом с несколькими крупными приложениями, я склонен делиться коллекциями или библиотеками модулей. Я не могу иметь сотни модулей на одной и той же плоской логической иерархии (или должен ли я?). Коллекция модулей будет обрабатывать логику Fruit, другая будет обрабатывать совершенно разные задачи, такие как обмен сообщениями вне приложения и т. Д. Мне также нужно повторно использовать часть модулей в других приложениях, например библиотеку сообщений. На самом деле то, что мне нужно, больше похоже на пространство имен C++ с плагином Singleton в каждой из моих lib и, конечно, все модули моего lib, используемые моим модулем lib и/или другими модулями libs. – Typedef