2012年12月11日火曜日

[Titanium奮闘記8日目]requireとexportsを使ってシングルコンテキスト #TitaniumJ

○シングルコンテキストであたふた

とりあえずいろんな人のページを見ながらコードを書いていく事に。

exports.spotWin = function(){
     〜あれこれコード〜
     return spotwin;
}

これだと謎のエラーが発生。

[object Object] is not a constructor (evaluating 'ほげほげ'

そこで一度関数を作り、それを後からexportするとエラーが出なくなった。

function spotWin(){
   
     〜あれこれコード〜

     return spotwin;
}

module.exports = spotWin;



しかし今度は表示されて欲しい画面が出てこない…なんでや。

ここでもう一度呼び出し元のソースを確認。

/* テーブルをクリックでタブが開く */
table.addEventListener('click', function(e){
     if (e.rowData.hasChild) {

          var nextWin = require('spotwin');
          win = new nextWin();
          win.barColor = '#000';
       
               〜中略〜

          spotWinBtn.addEventListener('click',function(){win.close()});

          win.open({modal:true});
     }
});

あれ、こっちでwin開いてるじゃん。

というわけで、spotwin.jsに書いてあった「spotwin.open();」を削除。
すると今度はこんなエラーが。

[ERROR] Script Error = Can't find variable: module at spotwin.js (line 23).

なんだこれ。。。

moduleがオブジェクトじゃなくて変数として見られてる?でも前のテストバージョンではうまく行ったのになんで?

もうやけくそでmodule.exportsをexportsのみにしてみた。すると普通に通りました。なぜだ…orz

とりあえず通ったからいいや…(注・まだ続きます↓



○さすがAndroid!俺たちに出来ないことを平然とやってのけるッ!

そこにシビレもしないし憧れもしないよ。

実は上記の方法だとエラーが出てしまいます。



Uncaught TypeError:Object is not a function.

win = new nextWin();

winの前にvarを入れたりとか、小さい頭でいろいろ試してみましたが、全部ダメ。

結局またやけくそでうまく通っていた時のうまく行ってた場所をまんまパクってみたところ…

通ったよ!
なんなんだよもぅ!

そもそもテスト段階で上手くいったソースを見てる限り、外部モジュールは利用していないし、moduleを定義していないのに使えるようになってること自体おかしいですよね。

これ多分CommonJSで定義されてるんだろうな…だから当然require以下も書き方が決まっていたってこと?

あくまで推測なんですが…教えて偉い人…

多分ここに詳しいことが載ってるんだろうけど…後で読む…
http://d.hatena.ne.jp/donayama/20111230/commonjs_modules_in_titanium



○tableViewのどの行が押されたのかを取得する

table.addEventListener('click', function(e){
     Ti.API.info(e.index);
}

e.indexってやつで何番目の行が押されたのかが分かります。

これを利用して、子windowに値を引き渡します。


ここを参考にしながら…
http://ti.masuidrive.jp/topic.php?id=174





よっしゃー!一発で通った!




またお前か。



もう考える気力がなくなったので、結局Ti.App.を使うことに。

まぁシングルコンテキストは一応出来るようになった(はず)だし、まぁいっか…(´・ω・`)



○明日の予定

・2点間から方角を指す部分を導入。
・あとリアルタイムで距離を測定するところも実装。

とりあえずそこが出来れば修論のプロトタイプとしては最低ラインができることになります…長かった…。

0 件のコメント:

コメントを投稿