javascript - 钛和合金 - 临时窗口被杀死时会关闭整个应用程序

标签 javascript titanium appcelerator titanium-alloy

我打开了 2 个窗口,其中一个是主窗口;和一个“弹出”加载窗口,该窗口仅显示一小会儿。

当我尝试

loading.close();

加载屏幕时,所有窗口都会立即关闭。没有错误代码或任何东西,应用程序直接关闭,因为屏幕上没有更多 View /窗口。 但我从未关闭过主“索引” View ,所以我不明白它为什么消失。 我的主要想法是使用

loading.hide();

为了隐藏加载屏幕并允许其余部分继续,但是当隐藏执行时,应用程序不会触发或响应任何事件,直到手动强制关闭为止。

<小时/>

更多代码:

index.js

var loading = Alloy.createController("loading").getView();

function updateMainMenu() {
    if (Ti.App.dataReady){  

        //Actually create the main menù, only if data is available.
        //Cut out of snippet due to sheer length.
        //When menù is complete, close the loading window.

        loading.close();  //##### THIS CLOSES ENTIRE APP #####
    }            
}

//##### IF LOADING IS HIDDEN INSTEAD, EVENTS NEVER TRIGGER #####
//When a list element is clicked open the corresponding page.  
function onListClick(e) {
    var win = Alloy.createController('controlPage', e.row.data).getView();
    win.open();
}

//Loads the View, displays it and keeps it updated.
$.index.open(); 
loading.open();
setInterval(updateMainMenu, 2000); 

loading.js/tss/xml 没有解决这个问题的相关代码,或者至少我是这么认为的。它只有一个窗口和一个 ImageView ,图像每半秒改变一次,并且在关闭之前它可以完美地工作。

注释:

  • 全局变量 Ti.App.dataReady 来自后台任务(另一个文件,工作正常);
  • 事件 onListClick 已正确绑定(bind)并且有效(如果我不首先打开加载)

最佳答案

首先,尽量不要使用index.open,因为它指的是"file"而不是实际的窗口。确保在窗口的 tss 文件中使用 id 并使用 .open(),希望查看完整的索引 Controller 以给出更准确的答案。

然后你同时打开两个窗口。尝试像这样连续打开两个窗口可能会给你带来竞争条件。如前所述,请确保在打开任何覆盖窗口之前打开第一个窗口。

一个好建议,因为您在这里制作跨平台应用程序,所以要确保一切顺利(所有平台、iOS、Android 和 Windows 的窗口都不同)。对于 Android,第一个窗口至关重要,并且将成为根窗口。如果万一您的覆盖窗口首先完成(是的,有些事情是异步的),那么您的覆盖窗口就是根目录,根据 Android 文档,关闭它将会关闭您的应用程序。

所以,在打开其他窗口之前,请务必确保第一个窗口已“完成”。监听打开事件,然后打开覆盖。

现在,如果您希望它看起来不错,您可能需要在 XML 文件中指定具有两个 View 的主窗口。首先在列表窗口上“隐藏”,在叠加窗口上“显示”。这样你就可以随时转移。如果您愿意,您可以重复使用叠加的“进度”窗口。

在我的应用程序中,我在小部件中使用 View ,因此我不必使用显示/隐藏,这样我也可以重用它。我想这是一个风格问题(除非我们开始讨论内存占用)

希望这对您有意义......

关于javascript - 钛和合金 - 临时窗口被杀死时会关闭整个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40419058/

相关文章:

android - Appcelerator Android 新的底部导航栏

javascript - 检测 Titanium 中的 mapView 上、下、左、右的移动

javascript - 我们如何在钛 GridView 项目中实现 Onclick 功能

javascript - 棘手的正则表达式捕获

javascript - 在多个用户之间共享上传的图像到 Canvas

来自数组值的 Javascript 动态变量名称 (Appcelerator Titanium)

javascript - Appcelerator Android 自定义字体不起作用

ios - 从使用 Titanium Appcelerator 创建的应用程序中删除灰色调

javascript - HTML id 的实际最大长度是多少?

javascript - Discord.js Bot 无法处理同一 channel 中的多个按钮(版本 13)