최근 alloy가 업데이트 되면서 globals가 기본적으로 세팅이 되어 있습니다. alloy 컴파일시 생성되는 resource/app.js을 보시면 아래와 같이 정의되어 있습니다.
var Alloy = require("alloy"), _ = require("alloy/underscore")._;
Alloy.Collections = {};
Alloy.globals = {};
Alloy.CFG = require(“alloy/CFG”);
Alloy.createController(“index”);
따라서 Alloy의 컨트롤러(js)파일이나 tss에는 Alloy.globals로 접근이 가능합니다. Alloy가 아닌 파일에서는 Alloy만 require해주면 Alloy.globals에 접근이 가능합니다. alloy컨트롤러 중에 가장먼저 실행되는 index.js에서(수정됨 이부분 아래 댓글 참조) alloy.js에서 global 변수들을 extend하고 다른 alloy파일에서 쓰면 되겠죠?
기타 config.json의 global
config.json의 global을 선언하면 Alloy.CFG를 통해 접근이 가능합니다. 이는 Alloy.globals와 비슷하지만 CFG라는 이름에서 알수 있듯이 이는 환경상수를 저장하기에 적합한것 같습니다.
Alloy.globals를 확장하기에는 index.js보다는 alloy.js가 적합하네요.^^ 더 좋은 곳이 있는데 제가 미처 몰랐습니다. (자동으로 생성된 주석에도 설명이 있네요.)
alloy.js 에 추가한 내용은 compile될때 app.js에서 index.js 의 크드보다 위에 놓여지게 됩니다.
그리고 alloy.js에서 바로 var myValue = 3; 과 같이 선언하고 다른 컨트롤러에서 myValue를 접근하는건 현재 아이폰에서만 동작합니다. 이게 잘못 구현된거라더군요. 대현의 글에서처럼 controller( commonjs 모듈)에서 쓸수 있는 글로벌 영역은 아주 없다고 보는게 맞는것 같아요. (이것도 정책이 바뀔지 모르지만 현재는 이 상태^^) 따라서 Alloy.globals에 필요한것 확장해서 쓰고 다른곳에서 Alloy.globals로 접근해서 쓰는게 좋겠죠.
2. window를 생성할때 url에 js를 지정해서 구현하면 해당 js에서 서브 컨택스트가 생성됩니다. 이 방법은 권장하고 있지 않고 commonjs 모듈 형태로 구현하는걸 추천하더군요. 이와 관련된 사항은 아래 링크를 참고
http://docs.appcelerator.com/titanium/2.0/index.html#!/api/Titanium.UI.Window 에서 sub-contexts 부분,