前回でapp.js内で効率よくファイル分割する手法をメモしましたが、その際「コンテキスト」っていう概念があるらしいので今回はそれをメモ。
コンテキストとはTitaniumMobileで実行されるJavaScriptの変数・オブジェクトのスコープのことらしいです。
ファイルをincludeした場合。インクルードファイルは実行元のapp.js内で単純にソースを出力された扱いになるので問題ないようですが、createWindowのurlプロパティに処理ファイルを指定した場合は別コンテキスト扱いで変数などは参照できないとか。
なのでコンテキスト間での値の受け渡しについてメモ
★呼び出し元(親)から呼び出し先(子)の場合
子に存在しないプロパティでも親元で動的に設定して処理することが可能
/////////app.js//////////
var hoge = true;
var window = Titnium.UI.createWindow({
url:'include/win1.js' //子のコンテキスト
});
window.newparam = true;
//////////////////////////
/////////win1.js//////////
alert(Titanium.UI.createWindow.newparam);
//////////////////////////
★呼び出し先(子)から呼び出し元(親)へ値を渡す場合
子でカスタムイベントを定義してその中にパラメータを定義して親に渡す。
イベントDispatch的??なことかしら?
/////////app.js//////////
var hoge = true;
var window = Titnium.UI.createWindow({
url:'include/win1.js' //子のコンテキスト
});
window.newparam = true;
/***カスタムイベントを受け取り処理****/
Titanium.App.addEventListenter('customEvent',function(event){
Titanium.API.info(event.namae);
Titanium.API.info(event.profile.age);
});
//////////////////////////
/////////win1.js//////////
/****呼び出し元に送出イベント*****/
Titanium.API.fireEvent('customEvent', {
namae:'山田太郎',
profile:{ sex:'男性',age:'30'}
});
//////////////////////////