Titanium初学者のメモです。
Titanium Mobileを触り始めました。Titanium歴3日です。
存在を知ってから数年経ちましたが、その間にいろいろ変化があったらしく。
今はAlloyというMVCフレームワークを使用するのが好いということでした。
キホンのキもない状態でいきなりAlloyから始めるのもどうかと思ったりもしましたが。
プロジェクトの新規作成をして生成されるファイル群の中で、なんだか一番わかりやすい気がしたのでした。
(もとはHTML5+CSS+JavaScriptでやろうと思っていましたが、いまいちシックり来ず。)
ハマった点
Label
を勘違いしていました。
HTMLでいうp
みたいなものかと思って。ちゃんとドキュメントを読めばわかるのに。
なので、Label
の中にImageView
を入れちゃって、画像が表示されずにハマりました。もー。
一番ハマった点
require
されたJS(モジュール?)側から、require
した側のViewの操作ができなかった。
すごく悩んだ末、できないということが分かりました。
Namespace
をいじれば何とかなるのでしょうが、あまりそれはしたくなかったのです。というか、それならincludeしたほうがいいような気がします。非推奨ですが。
HTTP通信をして、そのコールバックでDOM操作したい、みたいな場合はどうするんでしょう?
そういう処理が複数ある場合、全部元のControllerに書いたら、1枚のJSが異常に長くなるような気がするんですが。。。
というわけで、ひとまず1枚のJSに、1つのController分の処理はすべて書いてやり過ごしています。
おもったこと
Titanium.Network.createHTTPClient
を使う際に、onload
の設定を流れの中でやると非常に見通しが悪くなるので、functionを外に出しました。
最初は全部外に出して、send
だけ流れの中に置きましたが、そうすると何回も同じ処理を繰り返すごとにPOST
するデータが文字列連結されていく、、、おかしい。
なので、onload
で使用するfunctionのみを外に出して、他は(var xhr = Titanium.Network.createHTTPClient();
も)流れの中に置きました。xhrが初期化されるからか、解決しました。
でも、onload
も流れの中に置いて、
xhr.onload = function(){
//処理
};
のほうが取り回しは良いのかな、と思ったりもしました。引数とか関係で。
わかったこと
DOMに仕込んだイベントが発火した場合、関数に渡される引数に、そのDOMの情報が入っているっぽい。
<Alloy>
<Window class="container">
<View id="nantara">
<ImageView id="eventbtn" image="/images/nantoka.gif" onClick="btnclick" value="1">
</View>
</Window>
</Alloy>
dunction btnclick (e){
alert( e.source ); //ImageViewオブジェクト
alert( e.source.value ); //1が表示される
}
$.eventbtn
みたいに指定する場合と違って、こちらの方法の場合はrequire
された側のモジュールでも扱えました。
このこともあって、前項で書いたように、xhr.onload
の中身のfunction
も流れの中に書いたほうがいいのかな、と思いました。試していませんが。
明日以降の課題
- アプリ内で、SQLiteにデータを格納したり取り出したりしてみる
- アプリの操作でJSファイルの内容を書き換えられるのか調べる(ID・パスワード等はSQLiteに保存しないほうがいいというのをどこかで読んだので)
まだまだ勘違いもありそうですし、知らないことだらけなので、ガツガツ勉強します。
Perlのリファレンスみたいに、オブジェクトを参照渡しできればいいのに、と思いました。
でも、それできちゃうと混沌として、「設定より規定」が崩れるからダメなのでしょうか。