如何在发出HTTP请求时显示微调器(Appcelerator)

时间:2017-10-31 17:31:24

标签: javascript titanium appcelerator titanium-mobile

目前,我正在尝试在发出HTTP请求时显示一个微调器,该请求将在调用完成时结束。我已经建立了几个不同的微调器,但所有停止动画的第二个调用开始。

var spinnerArray = [];
for (var i = 0; i < 20; i++) {
    spinnerArray.push('/images/preloaderGif/preloader'+ ("0" + i).slice(-2) + '.gif');
}
$.spinner.images = spinnerArray; 
$.spinner.duration = "200"; 
$.spinner.repeatCount = "0";

spin();

function spin(){
    $.spinner.start();
    callHTTP() //Prewritten function
    Ti.App.addEventListener('callEnd', function(e){
        $.spinner.stop();
    });
}

这导致旋转器永远不会出现。取消调用或将其嵌套在超时内会导致微调器无限旋转,或直到超时结束。

有没有办法让微调器继续旋转通话?

2 个答案:

答案 0 :(得分:2)

实际上,有一个更好的&amp;超级简单的方式来显示指标。请按照以下步骤操作。

  1. 下载此小部件 Loading Indicator Widget &amp;将其添加到 app-&gt;小部件文件夹中的项目中。创建小部件文件夹(如果它不存在)。

  2. 将此行"nl.fokkezb.loading" : "*"添加到dependencies词典中的 app-&gt; config.json 文件中,如下面的屏幕截图所示。 enter image description here

  3. alloy.js 文件中添加 Alloy.Globals.loading = Alloy.createWidget("nl.fokkezb.loading");

  4. 最后,您可以在调用HTTP请求时使用此代码正确显示/隐藏指示符。

    function callHTTP() {
        if (!Ti.Network.online) {
           return;
        }
    
        Alloy.Globals.loading.show();
    
        var xhr = Ti.Network.createHTTPClient({
            onerror : function(e) {
                Alloy.Globals.loading.hide();
    
            },
    
            onload : function(e) {
                Alloy.Globals.loading.hide();
    
               // run your additional code here
            },
        });
    
        xhr.open("GET", url);
        xhr.send();
    }
    
    
    callHTTP();
    

    使用此小部件,您不需要为不同的项目编写长且容易出错的代码。只需添加此小部件&amp;只需2行代码即可显示/隐藏加载指示器。

    请记住,XHR 错误/成功回调是唯一可以编写代码来隐藏指标的地方,因为您无法确定HTTP请求何时完成。

答案 1 :(得分:2)

您可以使用ActivityIndi​​cator:http://docs.appcelerator.com/platform/latest/#!/api/Titanium.UI.ActivityIndicator

$.activityIndicator.show();
var xhr = Ti.Network.createHTTPClient({
    onerror : function(e) {
        // code
        $.activityIndicator.hide();
    },
    onload : function(e) {
        // code
        $.activityIndicator.hide();
    },
});

xhr.open("GET", url);
xhr.send();