Для приложения Titanium, которое я пишу, я структурировал модульный подход, при котором другие разработчики (когда меня покинули мою организацию или других попросили добавить в приложение) могут добавлять новые модули вприложение легко (не путать с модулями собственного кода).
Мне трудно понять, как загрузить модуль из массива и вызвать общий метод типа начальной загрузки для инициализации модуля.Приложение использует подход к пространству имен, предложенный авторами Tweetanium.
Приложение использует пространство имен: org.app
Я определил массив, который содержит настроенные модули, которые должны бытьзагружено в приложение:
org.modules = [
{
name: 'messages',
enabled: true,
title: 'Messages'
},
{
name: 'calendar',
enabled: true,
title: 'Calendar'
}
];
Каждый модуль имеет пространство имен: org.module.moduleName
, где moduleName
- это имя модуля из массива (например, сообщения или календарь).
IЯ создал каталог модулей, и мне удалось динамически включить файл js для каждого модуля, который включен (проверено путем статического вызова метода).Мне нужно вызвать метод createModuleWindow()
из кода модуля, чтобы получить основное представление для этого модуля.
org.module = {};
org.module.moduleManager = [];
// Loop through the list of modules and include the
// main modulename.js file if enabled.
// Create the module and add it to the module manager array
var modules = org.modules;
var config = org.config;
for (var i = 0; i < modules.length; i++) {
var _module = modules[i];
if (_module.enabled) {
Ti.include(config.moduleBasePath + _module.name + "/" + _module.name + '.js');
org.module.moduleManager.push(createModuleWindow(_module.name));
}
}
function createModuleWindow(moduleName) {
// Not sure what to do here.
return org.module.[moduleName].createMainWindow();
};
Для createModuleWindow()
я пробовал динамические классы и обозначения в квадратных скобках, но я простополучить ошибки, такие как 'moduleName', не является конструктором (в случае использования подхода класса) или ошибкой синтаксического анализа в случае приведенного выше кода.
Как я могу динамически вызывать метод модуля пространства имен?