2016-06-25 5 views
0

アンドロイドの合金アプリケーションのバックボタンの動作を理解できません。このシナリオは次のとおりです。appellereratorの合金アプリケーションのアンドロイドの戻るボタンの動作

使用するパラメータを渡すウィンドウの1つにウィジェットをロードしています。私は標準的な方法でこれらの引数を取得しています:

var args = arguments[0] || {}; 

私はargsをnullに設定しています。今、私はクローズボタンを使用してウィンドウを閉じる限り、これは正常に動作します。 argsはnullに設定され、再度ウィンドウを開くと再インスタンス化されます。

バックボタンでウィンドウを閉じると、argsはnullに設定されますが、再びウィンドウを開いた後は再インスタンス化されず、nullのままです。私はヘビーウェイトとライトの両方のウィンドウでこれをチェックしました。

戻るボタンは何をしていますか?ウィンドウを開くときに、すべての引数の再インスタンス化を再び有効にするにはどうすればよいですか?

コード: のindex.xml

<Alloy> 
    <Window id="myWin" class="container"> 
     <View layout="vertical"> 
      <Require type="widget" src="myWidget" id="myWidget" title='mainWindow' close='mainWindow' /> 
     </View> 
    </Window> 
</Alloy> 

index.js:

// setting args to null on window close 
$.myWin.addEventListener('close', function() { 
    $.myWidget.resetData(); 
}); 

インサイドはMyWidgetのコントローラー、widget.js:

var args = arguments[0] || {}; 

// sets args to null 
function resetData() { 
    args = null; 
} 

exports.resetData = resetData; 

上記のコードは再しません一度NULLに設定されたargsを開始します(ウィンドウを閉じるボタンで閉じるとき)。しかし、私がargsをエクスポートしてウィンドウコントローラ内でnullに設定すると、argsがnullであることが示されますが、argsは再び開始されなくてもウィンドウを再び開いた後にすべてのデータを保持します。

コード: index.js

$.myWin.addEventListener('close', function() { 
    $.myWidget.args = null; 
}); 

インサイドはMyWidgetのコントローラー、widget.js:

exports.args = args; 

をここで起こっている正確にどのような?

+0

ウィンドウを閉じる方法と、argsをnullに設定する方法のコードをいくつか共有できますか? –

+0

なぜargsをnullにする必要がありますか? AFAIKウィンドウを閉じると、すべての子要素もメモリから削除されるので、argsがグローバル変数に割り当てられていない限り、argsをnullにする必要はありません。 –

+0

実際、argsはウィジェットコントローラ内のグローバル変数として設定されています。さて、問題の再初期化に失敗しているので、範囲を変更できません。したがって、私がその範囲をローカルに変更した場合、次回は必要な引数が得られません。 – learner123

答えて

1

あなたは、私はあなたがこのような単一の関数内でこれを行うことをお勧め、引数をnullにウィンドウのOnCloseのイベントを使用している場合:

win.xml

<Alloy> 
    <Window onAndroidback="close"> 
     <ActionBar platform="android" onHomeIconItemSelected="close"></ActionBar> 

     <Button title="Close Window" onClick="close" /> 
    </Window> 
</Alloy> 

win.js

function close() { 
    args = null; 
    $.win.close(); 
} 
  • 戻るボタンを押しても通常の閉じるボタンでも、アクションバーの後ろの矢印でも同じ機能を呼び出すので、今度はウィンドウのonCloseイベントは必要ありませんので、同じことが起こることを確認しますすべての場合。

ご希望の場合はお手伝いします。ご希望の場合は、コードをご記入ください。がんばろう!!!


最後のコメントごとに、グローバル変数を使用せずにコントローラファイル内のウィジェットのデータにアクセスする方法は次のとおりです。

アプリ/ libに/ foo.jsは:

// For a classic Titanium project, save the file to 'Resources/foo.js' 
var data = {}; 
function setData (obj){ 
    data = obj; 
} 
function getData() { 
    return data; 
} 

// The special variable 'exports' exposes the functions as public 
exports.setData = setData; 
exports.getData = getData; 

アプリ/ビュー/のindex.xml

<Alloy> 
    <Window backgroundColor="blue"> 
     <Label onClick="openWindow">Open the Red Window!</Label> 
    </Window> 
</Alloy> 

アプリ/コントローラ/ index.js

var foo = require('foo'); 
foo.setData({foobar: 42}); 

function openWindow() { 
    Alloy.createController('win2').getView().open(); 
} 

$.index.open(); 

アプリ/ビュー/ win2.xml

<Alloy> 
    <Window backgroundColor="red"> 
     <Label id="label">I am a red window.</Label> 
    </Window> 
</Alloy> 

アプリ/コントローラ/ win2.js

var foo = require('foo'); 
$.label.text = foo.getData().foobar; 

あなたはまったく同じことを行うことができますあなたのウィジェットコードで。それが役に立てば幸い!

+0

私が使っているコードを編集するために編集しました。 – learner123

関連する問題