[Titanium勉強日記 6] CommonJSモジュールとrequireについて調べた

学校が始まったのと、触っていくにつれてTitaniumが銀の弾丸ではない事が分かってきて、ペースダウンしてしまっているのですが、一応継続してTitaniumの習得を試みています。

表題の件なのですが、Titaniumの1.8以降ではシングルコンテキストなコーディング作法というのが推奨されています。その作法ではrequire関数でモジュールをロードします。まぁrequireを使っている分にはあまり疑問も無かったのですが、先日試してみた軽量ORMのjoliに含まれていた以下のコードを見て疑問が湧いてきました。

/**
 * In case joli.js is loaded as a CommonJS module
 * var joli = require('joli').connect('your_database_name');
 * var joli = require('joli').connect('your_database_name', '/path/to/database.sqlite');
 */
if (typeof exports === 'object' && exports) {
    exports.connect = function(database, file) {
        var joli = joliCreator();

        if (database) {
            if (file) {
                joli.connection = new joli.Connection(database, file);
            } else {
                joli.connection = new joli.Connection(database);
            }
        }

        return joli;
    };
}

CommonJSモジュールって何やっけ?とか、そもそもexportsって何なん?とかexportsとmodule.exportsって何が違うん?という事ですね。

Continue reading “[Titanium勉強日記 6] CommonJSモジュールとrequireについて調べた”

[Titanium勉強日記 5] Viewを作るJavaScriptが実行される時の流れを追ってみた

モジュールの作り方が何となく分かったので、さっそくカスタムViewを書き始めましたが、幾つか分からない点があったので記録しておきます。

先ほどの記事にも書きましたが、欲しいのは同一View内に2つTableView A,Bがあって、AからBにドラッグドロップできるというものです。なのでTableViewを作って張りたいのですが、どこにその処理を書けば良いのか分かりません。Objective-CでiPhoneアプリを作る時はIBでGUIを作って、awakeFromNibとかViewControllerのviewDidLoadあたりで調整すると思うのですが、IBを使わないTitaniumモジュールの場合どうすれば良いのか分からないのです。

処理の流れを把握しておいた方が良さそうなのでソースコードを追ってみることにしました。まず出発点のJSのコードは以下のようになるかと思います。このFooViewが作られる過程を把握して、適切な場所でFooViewのサイズに合わせてTableViewを張りたいという事です。

var test = require('com.test');
var foo = test.createFooView({
	width: 'auto',
	height: 'auto'
});
win.add(foo);

Continue reading “[Titanium勉強日記 5] Viewを作るJavaScriptが実行される時の流れを追ってみた”

[Titanium勉強日記 4] モジュールを作ってみる

同一View内に2つTableView A,Bがあって、AからBにドラッグドロップする機能を書きたいんですが、現状のTiUITableViewだとセルをつかむ処理をフックできなさそうなので、モジュールを作ってみようと思います。

Continue reading “[Titanium勉強日記 4] モジュールを作ってみる”

[Titanium勉強日記 3] joliを使ってデータベースを叩いてみる

何となく画面の作り方が分かってきたので、次はデータベースを触りたいなという事で調べてみると、Titanium.Database.DBというインターフェースが用意されています。なんですがexecute位しか無くて、ローレベル過ぎて面倒くさいです。iPhoneのネイティブアプリ開発ですらCoreDataが使えるというのに。

まぁ僕はCoreDataはアンチなんですが、ORMは必須なゆとりプログラマなので、なんか無いのと思って調べてみたところjoli.jsというのが見つかりました。

ソースを眺めてみると全体で900行くらいの超軽量ORMで、当然Webフレームワークなんかと比べると全然機能は少ないですけど、SQL生で処理するよりは全然楽なので、試してみる事にしました。

Continue reading “[Titanium勉強日記 3] joliを使ってデータベースを叩いてみる”

[Titanium勉強日記 2] 画面遷移してみる

HelloWorldができたので次は画面遷移をしたいですね。それで適当にググりながら下記の様なコードを書いてみたのですが上手く動きません。アニメーションされずにパッと画面が切り替わってしまいます。

// 実験1
var win = Ti.UI.createWindow({backgroundColor: 'blue'});
var btn = Ti.UI.createButton({title: 'push to open'});
btn.addEventListener('click', function() {
	var win2 = Ti.UI.createWindow({backgroundColor: 'red'});
	win2.open({animated: true});
});
win.add(btn);
win.open();

そこでwin2.openを呼び出す際のプロパティを下記のように変更すると、iPhoneの時のみアニメーションするようになりましたが、それでは駄目です。何の為にTitanium使うと思ってるんですか。Androidでも普通のアニメーションしながら画面遷移くらいしてくれと思いますよね。

// 実験2
var win = Ti.UI.createWindow({backgroundColor: 'blue'});
var btn = Ti.UI.createButton({title: 'push to open'});
btn.addEventListener('click', function() {
	var win2 = Ti.UI.createWindow({backgroundColor: 'red'});
	win2.open({transition: Titanium.UI.iPhone.AnimationStyle.CURL_DOWN});
});
win.add(btn);
win.open();

Continue reading “[Titanium勉強日記 2] 画面遷移してみる”

[Titanium勉強日記 1] Hello Titanium World

次は奥さんの欲しいアプリを作ってみようと言う事になりました。奥さん曰く、普通の人はパソコンなんか触りたくない、できるなら全部携帯でやりたい、携帯アプリを作れとの事。奥さんはiPhoneを使っているのでiPhoneアプリです。でも、できればObjective-Cは書きたくありません。文字列を分割するだけでcomponentsSeparatedByString等と書くのはゴメンなのです。

iPhoneだけならRuby Motion一択なのですが、僕はAndroidを使っているので両方で動いた方が良いよね、というのでTitanium Mobileを覚える事にしました。僕は次の携帯はWindows Phoneを買おうと思っているので、最初は対応プラットフォーム数が多いPhoneGapを使いたかったのですが、手元のiPhone4で少し試したところ動作が遅過ぎたので諦めました。ちなみに現時点でTitanium MobileはiOSとAndroidに対応していて、BlackBerryサポートがベータまで来ています。(残念ながらWindows Phoneへの対応の予定は無いようです)。まぁオープンソースなので、スーパー本気出せば何だってできると言えばできます。

それで1.5ヶ月くらいで一個アプリを作りたいなぁと思っていて、それまでの過程を残していく事にします。

Continue reading “[Titanium勉強日記 1] Hello Titanium World”