どうやら最近色々やっていると、Titaniumのソースを書くときはシングルコンテキストがいいらしいという記事を見かけたので、ちょっと挑戦してみた。
ちなみにマルチコンテキストと言うのは、createWindowしたときにurl:’hoge.js’という形で外部のJSにWindowの設定などをすること。
var hoge = Ti.UI.createWindow({
title:'ウィンドウのタイトル',
url:’hoge.js’//表示する内容のJS
});
という感じ。
この時の弊害としてどうやらhoge.jsの中の変数やら関数やらにアクセスするときにグローバル変数を作って突っ込むとかそのグローバルな変数が上書きできないとかいろいろ弊害があるらしい。(そういう複雑な行ったり来たりとかいう動きをしなければこれでこれはこれで全く問題ないらしいけど)
なので、CommonJSスタイルのシングルコンテキストという書き方が推奨されているらしい。
例:
-app.js
//グローバルな変数を定義
var App={};
App.ui = require('App/ui');
App.table = require('App/table');
App.hoge = require('App/hoge');
(function(){
//tabGroup
App.tabGroup = App.ui.createAppsTabGroup();
App.tabGroup.open();
})();
という感じでrequireで読み込む。
requireで読み込むとApp.table.関数名とかで外からアクセスできるようになるんだけど、読み込まれる側にもエクスポートするように書かなければいけない。
-ui.js
{前略}
exports.createAppsTabGroup = fnction(){
var tabGrou = Ti.UI.createTabGroup();
{中略}
return tabGroup;
};
こんな感じで関数の前にexportsをつけてあげると外から呼び出す時にrequireされた変数に格納されるので呼び出し方が
App.ui.createAppsTabGroup();
という風になるっぽい。
とりあえず、もっと大規模になって各画面から別の画面に変数を引き渡すことが頻繁にならないといろいろ難しっぽいけど今後はおそらくこの書き方が主流になっていくっぽいので引き続き挑戦してみる。拡張性はこちらのほうが高いみたいなので少しでも慣れているといいかなと。あと、どうやらnode.jsとかも同じような書き方をするらしいし。
というわけで、GitHubにサンプル上げてみた。
requireすると1ページのJSに展開されるらしいのであまりにも大量なソースコードはもしかしたら重くなりすぎてしまうとかあるらしい。まぁ、でもそこまでいったらたいしたもんだよねw
ツイートRelated posts: