Titaniumのインクルードパスを指定する方法私案

(2011-06-07 21:29:06追記)この記事で書かれている現象はTitanium Mobile SDK 1.7で修正されます。しかも、予測とは違う仕様になったので、この記事に書かれているサンプルコードは動かなくなります。詳しくはTi.includeの不具合が1.7で修正される模様 - もぎゃろぐを見てくださいませ。
(追記終わり)

 TitaniumMobileでとっても困っていることが一つあって、Ti.include('lib/a.js') って書いた時、iPhoneだと Resources/lib/a.js を見に行ってくれるんだけど、Androidだと Resources/lib/lib/a.js を見に行ってしまう。

#2585 Include paths for iphone and android are not based on the same starting point - Titanium Mobile - appcelerator
  かなり困る問題なのに1.6.0でも直らないそうで、みんな困った末にこんな黒魔術が発見されました。
以下のように指定するとどの場所にあるファイルでTi.includeしても確実にファイルをインクルードできる。
Ti.include("../../../../../../../../../lib/bookmark.js")
TitaniumのインクルードパスをResourcesからの相対パスで指定する方法 | ひげろぐ
sxc.hu.657889.jpg

さすがにこれはちょっと(汗) ひげろぐの人が考えた訳じゃないし、考えた人だって困った末に編み出したのだとは思いますが、なんか鼻から悪魔とか出てきそうでムズムズします。

いろいろ試した末にたどり着いた別案。

var path_lib = 'lib/';
if (Ti.Platform==null || Ti.Platform.osname=='android'){
  path_lib = '';
}
Ti.include(path_lib+'a.js');
Ti.Platformを確認しているのは、Android環境でTi.Platform環境がnullになることがあるから。
Appcelerator Developer Center - continuous 1.5.0 on android ... ti.Platform.name crash

黒魔術よりはすっきりすると思うのですが、将来的に不具合が修正されたり、Andoirod以外の環境が出てきた場合にはコードを修正しないといけなくなる可能性が高いので、これはこれで問題があります。なんかもっといい案があればぜひ教えてください。

カテゴリ:

トラックバック(0)

このブログ記事を参照しているブログ一覧: Titaniumのインクルードパスを指定する方法私案

このブログ記事に対するトラックバックURL: http://mogya.com/mt/mt-tb.cgi/1140

コメント(1)

mogya :

忙しくて試せていないのですけど、こういう別案をいただいています。

lnでリンク貼ってみる http://twitter.com/#!/sakira/status/40969361833328640
requireつかう http://higelog.brassworks.jp/?p=1327

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、 もぎゃが 2011年2月22日 21:09に書いたブログ記事です。

ひとつ前のブログ記事は「 任意の書類をShotNoteで取り込めるクリアファイル 」です。

次のブログ記事は「 震災関連のサービスを作る時参考になりそうなページまとめ 」です。

最近のコンテンツは インデックスページ で見られます。過去に書かれたものは アーカイブのページ で見られます。

Powered by
Movable Type