0

嘿,我试图让一个窗口填充一个表格视图,该视图是从 Titanium Studio 中的网络功能填充的,构建:2.1.1.201207271312。我已正确获取数据,但问题是程序继续运行而无需等待正确填充表视图。这是代码:

ui.js:

bs.ui.createTransitRoutesListWindow = function() {

    var winbsRoutesList = Titanium.UI.createWindow({
    });
    var tv2 = Ti.UI.createTableView();
    tv2 = bs.ui.createbsRouteListTableView();

    winbsRoutesList.add(tv2);       
};

bs.ui.createbsRouteListTableView = function() {

    var tv = Ti.UI.createTableView();       

    Ti.API.info('populating data');
        var busStopList = bs.db.routeStopList(); 

        tv.setData(busStopList);

        return tv;

};

db.js:

 bs.db.routeStopList = function() {
var stoplist = [];

bs.net.getRoutes(function(data) {
    Ti.API.info('data length: '+data.length);
    for (var i = 0;i<data.length;i++) {
        stoplist.push({
            title:data[i].stopName,
            id: i
        });
    }

});
return stoplist;
 }

网络.js

bs.net.getRoutes = function(_cb) { 

    var xhr = Titanium.Network.createHTTPClient();
    xhr.onload = function() {  
        _cb(JSON.parse(this.responseText));

    Ti.API.info(this.responseText)
    };
    xhr.onerror = function(event) {
    }
    xhr.open("GET","<URL to valid JSON>", true);  
    //+ Ti.App.Properties.getString('currentBus','This is a string default')
    xhr.send();

};
4

1 回答 1

0

bussearch.net.getRoutes()是一个 AJAX 操作,因此它是异步的。这意味着代码不会等待它完成。响应进行时,代码将继续进行。它会响应的时间也不知道。

如果你想在数据返回后做一些事情,你应该在回调中做所有事情,或者创建像 jQuery 这样的延迟对象(基本上是回调容器)。

//db.js
bussearch.db.routeStopList = function(callback) {
    var stoplist = [];
    bussearch.net.getRoutes(function(data) {
        ....
        callback.call(this,stoplist);
    });
}

//ui.js
bussearch.ui.createBussearchRouteListTableView = function(callback) {
    var tv = Ti.UI.createTableView();       
    Ti.API.info('populating data');
    bussearch.db.routeStopList(function(busStopList){
        tv.setData(busStopList);
        callback.call(this,tv);
    }); 
};

//calling createBussearchRouteListTableView()
createBussearchRouteListTableView(function(tv){
    //tv in here is the data
    //do inside here what you want to do to tv after it's retrieved
});
于 2012-08-14T22:30:54.870 回答