[Titanium Mobile]設定情報などをアプリ内で共有するためのメソッドを作る
とかく不健康な生活になりがちなので週に1,2回ジムに通うことにしたtanakaです。
今回は、Titanium Mobile でアプリ内の設定値を書いたり読んだり出来るしくみを考えてみました。
次のような感じで使えるものを考えます。
Ti.App.Conf.set('jojo3', 'オラオラオラオラ');
Ti.API.info(Ti.App.Conf.get('jojo3')); // →出力:オラオラオラオラ
Ti.App.Conf.set('jojo3', '無駄無駄無駄無駄'); // 設定を上書きする
Ti.API.info(Ti.App.Conf.get('jojo3')); // →出力:無駄無駄無駄無駄
Ti.Appにメソッドをぶら下げているのは、アプリ全体で、共有できるからです。 このようにデータを読み書きできる機能を実現するためのコードは以下の通りです。
app.js
Ti.App.Conf = (function () {
var values = {};
return {
set: function (key, value) {
values[key] = value;
},
get: function (key) {
return values[key];
}
};
})();
// 使い方
Ti.App.Conf.set('jojo3', 'オラオラオラオラ');
Ti.API.info(Ti.App.Conf.get('jojo3')); // →出力:オラオラオラオラ
Ti.App.Conf.set('jojo3', '無駄無駄無駄無駄'); // 設定を上書きする
Ti.API.info(Ti.App.Conf.get('jojo3')); // →出力:無駄無駄無駄無駄
コードを実行すると、Ti.App.Conf.set, Ti.App.Conf.get が用意され、データが読み書きできます。
なぜ、Ti.App以下に直接データを保持しないか
上記の実装は忘れて次のように実装してみます
Ti.App.ConfData = {};
Ti.App.Conf = {
set: function (key, value) {
Ti.App.ConfData[key] = value;
},
get: function (key) {
return Ti.App.ConfData[key];
}
};
Ti.App.Conf.set('jojo3', 'オラオラオラオラ');
Ti.API.info(Ti.App.Conf.get('jojo3')); // null を返す
Ti.App.Conf.set('jojo3', '無駄無駄無駄無駄');
Ti.API.info(Ti.App.Conf.get('jojo3')); // null を返す
Ti.App.ConfData にデータを入れるようにしたつもりですが、こちらのコード、実は動作しません。どうやら、Ti.App.xxx に代入したデータは、中身を書き換えられなくなってしまうようで、Titanium のバグではないようです。
まとめ
- グローバルに設定情報などを読み書きできる仕組みを考えてみました
- Ti.App.xxx に代入するとTi.App.xxx.test などに追記できなくなります(Ti.App.xxxに再代入は可)