2012-08-14 36 views
0

嘿,所有我試圖讓填充是從鈦工作室的網絡功能填充的,建一個表視圖窗口:2.1.1.201207271312。我已經獲取的數據properlybut的問題是,程序繼續運行,而等待要正確填充表視圖運行。下面的代碼:鈦工作室保持功能的執行,直到另一個函數完成

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; 
} 

network.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(); 

}; 

回答

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 
}); 
+0

這工作,我明白了。拿走我所有的便士。 – user1599312 2012-08-14 22:53:56

相關問題