2

私は 2 つの js ファイルを使用して、titanium アプリでそれらの間で変数を共有しています。メインの app.js には、テーブルの各行に関連付けられた 3 つの変数があります。コンポーネントが別のjsファイルにあるモーダルビューを開くために行をクリックしたときのイベントリスナーがあります。私の 3 つの変数は以下にあり、クリック イベントで 3 つの変数と 3 つのグローバル変数のアラートが表示されます。

var titleText = titleInRow.text;
var artistText=artistInRow.text;

Ti.App.myGlobalSongVar = titleText;
Ti.App.myGlobalArtistVar = artistText;

var rowNumber=e.row.name;
Ti.App.myGlobalRowNumber= rowNumber;

alert("titleText is: "+titleText+" and /n artistText is "+artistText+ " and /n row number is "+rowNumber +"/n TiAppmyGlobalSongVar is "+Ti.App.myGlobalSongVar+ " /n TiAppmyGlobalArtistVar is "+Ti.App.myGlobalArtistVar);

これらはすべて正しい結果を返しています。次に、2 番目の js ファイルには、次のアラートもあります。

alert("\n TiAppmyGlobalSongVar in modal is "+Ti.App.myGlobalSongVar+ " \n TiAppmyGlobalArtistVar in modal is "+Ti.App.myGlobalArtistVar + "TiAppmyGlobalRowNumber in modal is "+Ti.App.myGlobalRowNumber);

2 番目の js ファイルで 行を初めてクリックしたとき、2 番目のアラートの変数はすべて未定義です。2 回目にクリックすると、それらはすべて定義されていますが、間違っている場合があります。最初にクリックした未定義の行の変数の結果が得られるようです。この質問が明確であることを願っています。私は何を間違っていますか?

更新してください!!: 最後に、試した後:

Titanium.API.titleText = titleText;
Titanium.API.artistText = artistText;

Ti.App.Properties.setString('globalTitleText', titleText);
Ti.App.Properties.setString('globalArtistText', artistText);

Ti.App.myGlobalSongVar = titleText;
Ti.App.myGlobalArtistVar = artistText;

(2回目はすべて機能しましたが、最初は未定義でした)、機能した唯一のことは、テーブルイベントリスナーでこのイベントを発生させることでした:

Ti.App.fireEvent('myCustomEvent', {
          myTitleText: titleText,
          myArtistText: artistText
        });

これを2番目のjsファイルに入れます:

var globalTitleText;
var globalArtistText;
    Ti.App.addEventListener('myCustomEvent', function(event) {
            globalTitleText=event.myTitleText;
            globalTitleText=event.myTitleText;
            //Ti.App.globalTitleText=event.myTitleText;
            //Ti.App.globalArtistText=event.myArtistText;
            alert('You sent me: '+event.myTitleText+" and "+event.myArtistText);
    });

//However I can't use it here in my second js file (outside the custom event listener) as it is undefined. 

問題の最後の部分を手伝ってくれる人はいますか? 他の方法がうまくいかなかった理由はまだわかりません。以前にさまざまなコンテキストでそれらを使用したことがあり、機能しましたが、この特定のインスタンスでは機能しませんでした!

4

2 に答える 2

1

次のコードは eventListener に含まれていますか?

var titleText = titleInRow.text;
var artistText=artistInRow.text;

Ti.App.myGlobalSongVar = titleText;
Ti.App.myGlobalArtistVar = artistText;

var rowNumber=e.row.name;
Ti.App.myGlobalRowNumber= rowNumber;

変数をグローバルにするには、eventListener 関数の外で変数を宣言する必要があります。何かのようなもの:

var rowNumber;
tableView.addEventListener('click',function(e) {
    rowNumber = e.rowIndex;
}

rowNumberApp.js で宣言されている場合はグローバルになりますが、次のようになります。

tableView.addEventListener('click',function(e) {
    var rowNumber;
    rowNumber = e.rowIndex;
}

しません。

于 2013-09-05T19:38:58.907 に答える
0

チタン開発者フォーラムのこのリンクにアクセスしてください

Titanium のグローバル変数

...................................

また、その場合に機能する独自のオブジェクトを渡すことも最善です。

オブジェクトをグローバル変数として渡す

確認してお知らせください

注: App.jsでも変数を宣言します:)値を変更する場合は、他のJSでそれを行います。

于 2013-09-05T11:59:12.003 に答える