Help us understand the problem. What is going on with this article?

【Titanium】これから始めるときにこれ知ってると色々楽だなぁと思うまとめ

More than 5 years have passed since last update.

なんだがTitaniumとお付き合いが長いです。私です。
今回は、ぐぐってもなかなかHitしなかった知っておくと便利な知識集や、先輩のコードを見てあぁ、なるほどな!と感じたAlloyフレームワークを用いた知識など5点程紹介します。

httpClientで持ってきたオブジェクトの中身確認したい。

htmlclientとかでjsonにしてobjectで引っ張ってきたものを取れているか確認するときに
ただ単純にTi.API.info(object)ってやると[object object]って表示される時ありますよね?
あれ凄くイラッとするんですけど

Ti.API.info(JSON.stringify(object));

こーすると上手く表示してもらえます。

基本、大きく機能が変わら無い限りwindowは一つでいいと思う!

大きく仕様が変わる画面に移動しない限り、
windowは最初アプリが起動した時のindexの時のwindowのまま、
上に載せるビューを切り替えていくのが正解のような気がします。

それってどうするのって話ですけどTitaniumのAlloyフレームワークを使ったやり方ですと、

var newController = Alloy.createController('nextpage').getView();

removeChildren($.index);
$.index.add(newController);


function removeChildren(view) {
    var children = view.getChildren();
    Ti.API.debug(children);

    var len = children.length;
    for(var i=0; i<len; i++) {
        var child = children[i];
        var childId = child.id;
        view.remove(child);
    }
}

こんな感じに記述して、外部化してどこからでも引っ張ってこれるようにするとスマートかもしれません。

一応順を追ってどうなっているか説明しますと。
1,アプリ起動する。index.xmlで記述してあるだろうwindowとview部分が描画される。
2,ページが遷移するアクションが引き起こされた際に、Alloy.createControllerでnextpageのviewの読み込みが走る。nextpageにはwindowの記述はない。
3,先に$.indexで既に記述されているview部分をremoveChildrenという関数で閉じる。※上手く書かないとaddEventが消えないので注意!
4,$.indexで生成されている真っ白なwindowにnextpageのviewが乗っかる!

って感じです。ちょっとviewの管理体制を最初に作るのがやや濃いかもしれないけど
一度作ってしまえば全てのviewの行き来を一括管理できるかららくだと思います。

一度indexでwindow生成して、全部の箇所で使うイベントはfireEventにしてindexに予めaddしておけば、整理が凄い簡単ですね。

alloy.jsは活用しまくろう。

Titanium使い始めで意外と忘れがちなのがこの子です。
アプリ起動時に最初に動作するalloy.js君。

この子はどんどん活用しよう。
最初に処理しておきたいあんなこと。
宣言しておきたグローバル変数。

例えばview通しでフラグの確認をする際に、
一番最初に起動したところで変数を作るとか、そんな感じのところは全部allot.jsくんに任せてしまおう。

データの持ち越しはSQliteをガシガシ使おう。

アプリを終了して、その時のデータを持ち越したいときは間違いなくSQliteを使ってデータをアプリ内で保存した方がいいです。

変にファイル生成して管理してるとわかりにくくなると思いますので...

AlloyだとModelとして宣言しているので分かりやすいと思います。
Titanium SQlite 使い方
とかでググれば潤沢に情報が引き当てれるはずです。

ファイルを分けてデバイス対応しよう。

TitaniumでAlloyを使い始めだと地味に気づきにくくて、地味に優秀な機能。

view-Android-index.xml
┗ios-index.xml
┗index.xml

こんな感じでディレクトリ構造にしておくと、デバイスごとに処理を完全に分岐できます。
ルールとして、中身空っぽでもいいので、view直下に読み込み先のファイルを用意しておく必要があるみたいです読み込むものはデバイスに対応したものを見に行きます。

styleでも同じ事ができますので、デバイスごとに描画ルールが地味に違いに悩んだら思い切って作り分けするのが良いです。

ちなみに、対応したデバイスのディレクトリが無い時はview直下にあるものを読み込みます。
対応しているのがiosとAndroidだけなら、Androidというフォルダを用意しておけばiosは直下のファイル。AndroidはAndroidディレクトリの中のファイルを読み込む。みたいな感じに出来ますね。

まとめ

とまぁ、ざっくり五点ほど紹介しましたが、いかがだったでしょう?
案外知らなさそうなところから、先輩からの学び等を入れてみました。

ざっくり書きすぎて細かいぶぶわからないかもですが、余裕があれば質問にはお応えします。(僕以外のTitaniumMobilerがきっと...w)

では、お疲れ様でしたー。

mmusasabi
(*´д`*)パッション!!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away