gpt4 book ai didi

javascript - appcelerator 合金应用程序中 android 中的后退按钮行为

转载 作者:行者123 更新时间:2023-12-03 06:39:28 25 4
gpt4 key购买 nike

我无法理解 Android 合金应用程序中的后退按钮行为。场景是这样的:

我正在我的一个窗口中加载一个小部件,并向其中传递一些要使用的参数。我正在以标准方式检索这些参数:

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

在窗口关闭时,我将参数设置为 null。现在,只要我使用关闭按钮关闭窗口,就可以正常工作。 args 设置为 null,并在我再次打开窗口时重新实例化。

当我使用后退按钮关闭窗口时,args 设置为 null,但一旦我再次打开窗口,args 就不会重新实例化,并保持为 null。我已经用重量级和轻型窗口检查了这一点。

后退按钮有什么作用?如何在打开窗口时重新实例化所有参数?

代码:索引.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 的 Controller widget.js 中:

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

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

exports.resetData = resetData;

一旦设置为 null(当我们使用后退按钮关闭窗口时),上面的代码不会重新启动 args。但是,如果我导出 args 并将其在窗口 Controller 中设置为 null,它会显示 args 为 null,但是一旦我们再次重新打开窗口,args 就会拥有所有数据,即使它没有再次启动。

代码:索引.js

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

在 myWidget 的 Controller widget.js 中:

exports.args = args;

这里到底发生了什么?

最佳答案

如果您使用窗口的 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 事件,因为您在按下后退按钮和正常关闭按钮,甚至在操作栏的后退箭头上调用相同的函数,因此这将确保在每个事件中都会发生相同的事情案例。

希望它能对您有所帮助,如果没有,请分享一些代码。祝你好运!!!

<小时/>

根据您的最后评论,以下是您如何在不使用全局变量的情况下访问任何 Controller 文件中小部件的数据。

app/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;

app/views/index.xml

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

app/controllers/index.js

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

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

$.index.open();

app/views/win2.xml

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

app/controllers/win2.js

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

您可以使用小部件代码执行完全相同的操作。希望对您有帮助!

关于javascript - appcelerator 合金应用程序中 android 中的后退按钮行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38028634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com