何処かのブログ記事で、Titanium Mobile の現代的お作法について、
> 最近の Titanium では CommonJS + シングルコンテキストで実装することが推奨されている。
のように書かれていたのだけれど、まったく意味がわからなかったので調べてみた。
シングルコンテキストとは?
———————————————————————-
次のようにウインドウを生成する時、[ url:’hoge.js’ ] を使う方法をマルチコンテキストと呼ぶそうです。
var hoge = Ti.UI.createWindow({
url: ‘hoge.js’
});
このマルチコンテキストの場合、ウインドウ間のデータ受け渡しを行う方法がグローバル変数しかなく、ちょっと問題らしい。
ウインドウ間で複雑に変数とかのやり取りをしないのであれば、マルチコンテキストでも問題ないそうです。
シングルコンテキストの場合は、require で読み込むので、変数に外からアクセスできるんだそうです。
それから、Ti.include は非推奨になるんだそうな。
シングルコンテキストは、ファイルを分割するな!と言う事ではなさそうです。
CommonJS とは?
———————————————————————-
CommonJS とは、次のように書かれていました。
> Google グループの CommonJS グループで議論されている Server-side JavaScript のための標準仕様。
> モジュールをインポートするための文法から、パッケージの配布方法まで、多岐に渡る議論が行われています。
標準的な JavaScript のコーディングスタイルって事?
良くワカランw
CommonJS + シングルコンテキストのサンプル
———————————————————————-
次のサンプルは、別ファイルに定義されている変数を読み込んで表示します。
app.js
// app.js
var MyApp = {};
MyApp.test = “これは app.js 内の文字列です。”;
MyApp.win = require(“Module”).win();
// Module.js 内の文字列を表示
Ti.API.info(MyApp.win.test);
Module.js
// Module.js
exports.win = function() {
var self = Ti.UI.createWindow();
self.test = “これは Module.js 内の文字列です。”;
// app.js 内の文字列を表示
Ti.API.info(MyApp.test);
return self;
};
変数の受け渡しが簡単!
参考にさせてもらったページ
———————————————————————-
– [node.jsとは何か(3) – I am Bad at Math](http://d.hatena.ne.jp/badatmath/20101026/1288109275)
– [CommonJSスタイル?シングルコンテキスト?? | LEGGODT.COM](http://leggodt.com/2012/01/05/commonjs-style-singlecontext.html)
– [小さな Titanium Mobile の読み物](http://imthinker.net/titanium/)
– [titanium でシングルコンテキストな書き方にチャレンジ – インターネット時代のキャリアプランとは?](http://d.hatena.ne.jp/h5y1m141/20110930/p1)
– [Titanium Mobile Best Practices – JP::HSJ::Junknews::HatenaSide](http://d.hatena.ne.jp/donayama/20120102/bestpractices)
– [CommonJS Modules in Titanium – JP::HSJ::Junknews::HatenaSide](http://d.hatena.ne.jp/donayama/20111230/commonjs_modules_in_titanium)
ありがとうございます!