Ti.Appにオブジェクトをくっつけてグローバル変数的に使う

2011-02-18
かなり古い記事です。現在も有効な内容であるかどうか分かりませんのでご注意ください。

Ti.Appはグローバルなオブジェクトなので、これにメソッドやプロパティをくっつけるとTi.Appを介してどこからでも使えるようになる。
Ti.Appってそうやって使っていいものなのかという疑問は残るが、いろんなソース片を見る限り割と普通に使われているテクニックな模様。

サンプルコード

究極に簡単なものをひとつ。

app.js
Ti.App.foo = "FOO!";
var win = Ti.UI.createWindow({url: 'lib/win1.js', title:'Window 1'});
win.open();
lib/win1.js
alert(Ti.App.foo);

使いどころ

NavigatoinGroupを、TabGroupまかせではなく、直接使おうとしたときなんかは使いどころだと思う。
Window間でいちいち変数を持ち回るのもめんどくさいので。

セッション変数的に使ったり、アプリケーション定数の保持なんかにもいいのではないかと。

注意点

衝突を避ける

Ti.Appの既存のメソッドやプロパティを上書きしないように注意する必要がある。
これに関してはネームスペースを作ってやると確実。今後増える可能性もあるしね。

Ti.App.jp.brassworks.foo = "FOO!";

ただあんまり長くなりすぎるのも使いにくいので、適当に略語にしてしまったりとか。

Ti.App.jb.foo = "FOO!";
メモリ

グローバルなオブジェクトになるので、存在する限りアプリの終了までメモリを専有し続ける。
なので、あまり大きなオブジェクトを入れない、用がすんだら消すなど。

グローバル変数の落とし穴

グローバルであるがゆえに退治しにくいバグを作ってしまう原因にもなりかねないので、ご利用は計画的に。

Profile

フルスタック気味のフリーランスプログラマー。

どちらかと言うと得意はインフラ構築とサーバーサイドプログラミングですが、フロントエンドもぼちぼちやっています。

最近の興味範囲はWordPress、AWS、サーバーレス、UIデザイン。

愛車はセロー。カメラはペンタックス。旅好きです。横浜在住。