Круговые зависимости в Titanium/ RequireJs
У меня есть некоторые циклические зависимости в моем приложении Titanium, например:
index.js
var Auth = require('Auth')
Auth.js
var PopUp = require('PopUp');
function isLoggedIn() {
// some logic e.g. return userName !== null
};
function authorise() {
if (isLoggedIn()) {
return true;
} else {
return PopUp.authorise();
}
}
Неожиданно возникнуть
var Auth = require("Auth");
function authorise() {
// some code asking user to login
}
function showSecurePopUp() {
if (Auth.isLoggedIn()) {
// show secure pop up
}
}
Как видите, у нас круговая зависимость. Auth
потребности PopUp
а также PopUp
потребности Auth
,
Это создает циклическую зависимость и, следовательно, следующее сообщение об ошибке:
[ERROR] [iphone, 10.3.3, 192.168.0.64]
Type: RangeError
Message: Maximum call stack size exceeded.
File: /iphone/Auth.js.js
Line: 24
Как я могу решить проблему циклических зависимостей в приложении Titanium Alloy?
1 ответ
Я думаю, что так может быть, вы вносите следующие изменения в свой проект, и это должно решить проблему.
Alloy.js
var Auth = require("Auth");
var PopUp = require('PopUp');
index.js
Auth.authorise();
Auth.js
var isLoggedIn = function() {
// some logic e.g. return userName !== null
Ti.API.info('isLoggedIn');
return false;
};
exports.authorise = function() {
if (isLoggedIn()) {
Ti.API.info('authorize isloggedIn');
return true;
} else {
Ti.API.info('authorize not logged In');
return PopUp.authorise();
}
};
exports.isLoggedIn = isLoggedIn;
PopUp.js
exports.authorise =function () {
// some code asking user to login
Ti.API.info('authorize funcition popup ' + Auth.isLoggedIn());
};
function showSecurePopUp() {
if (Auth.isLoggedIn()) {
// show secure pop up
Ti.API.info('isLoggedIn show secure popup');
}
}
Дайте мне знать, если это работает нормально, и если это то, что вы хотели. Также, если у вас есть какой-то другой подход, который решает проблему, то дайте мне знать об этом.
Удачи и Приветствия
Ашиш Себастьян