Mobile 钛合金手机:使用另一个控制器关闭活动指示器

Mobile 钛合金手机:使用另一个控制器关闭活动指示器,mobile,android-activity,titanium,Mobile,Android Activity,Titanium,我有4个控制器,index.js、token.js、main.js和token.js。索引检查身份验证,如果找不到详细信息,则重定向到token.js以获取用户详细信息。如果验证检查,则会打开包含用户详细信息的main.js。现在,在token.js中打开命令之后,我有一行代码来显示指示器活动: var dispIndicator = Alloy.createController('loader').getView(); dispIndicator.open(); 现在,我没有使用timeou

我有4个控制器,index.js、token.js、main.js和token.js。索引检查身份验证,如果找不到详细信息,则重定向到token.js以获取用户详细信息。如果验证检查,则会打开包含用户详细信息的main.js。现在,在token.js中打开命令之后,我有一行代码来显示指示器活动:

var dispIndicator = Alloy.createController('loader').getView();
dispIndicator.open();
现在,我没有使用timeout作为指示器,因为我想精确地知道main.js进程后面的显示何时完成。当所有内容都已获取且所有元素都已准备就绪时,在main.js中,我有以下几行代码来关闭指示器:

var dispIndicator = Alloy.createController('loader').getView();
dispIndicator.close(); // also tried hide();
但是,这不起作用,而是给出了一个未定义的错误


如何从主控制器中关闭加载程序?

最简单的方法是使用alloy.js文件并创建全局函数来显示和隐藏加载指示器。我决定使用全局事件侦听器隐藏加载程序:

alloy.js

var loaders = [];
Alloy.Globals.loading = function(view) {
  if (!view.hasLoading) {
    var loading = Alloy.createController('loading');
    loaders.push({
      view: view,
      loading: loading.getView()
    });
    loading.indicator.show();
    loading.loading.show();
    view.add(loading.getView());
    view.hasLoading = true;
  }
};

Ti.App.addEventListener('app:loaded', function() {
  for (var i in loaders) {
    if (loaders[i].view && loaders[i].loading) {
      loaders[i].view.remove(loaders[i].loading);
      loaders[i].view.hasLoading = false;
    }
  }
  loaders = [];
});