2012-04-13 82 views
0

我有一個循環,用於調用異步請求到服務器的每個項目,使用webview創建視圖以便稍後在計算位置後添加到滾動視圖中。在回調中,我得到服務器數據並提供給webview。Titanium - 當通過異步回調加載Webview時不會呈現

當load方法需要一些時間來執行(例如,在一個緩慢的連接中),webview不會被渲染。

這種情況在設備中發生很多次,但在模擬器中很少出現。但是,要輕鬆模擬,只需在加載方法中放置一個斷點,延遲執行。 我懷疑在渲染已經添加的webview時存在問題。

我簡化在一個塊中的代碼以更好地理解:

function createView(){ 

    var view = Ti.UI.createView({ 
     //... 
    }); 

    var webview = Ti.UI.createWebView({}); 
    view.add(webview); 

    //Callback to process webview content after receive the server data  
    view.load = function(serverData){ 
     webview.setUrl(serverData.url); 
     webview.addEventListener('beforeload', function(){ 
      webview.evalJS("var value="+serverData.value+";"); 
     }); 
    }; 

    return view; 
}; 

var views = new Array(); 

for(i=0;i < data.length;i++){ 

    views[i] = createView(); 

    //Async request to server 
    var req = Ti.Network.createHTTPClient(); 

    req.onload = function(){ 
      result = JSON.parse(this.responseText); 
      views[i].load(result); 
    } 

    req.open("POST", "http://myserver.com.br/myservice"); 
    req.send({myParam: data[i].value}); 
} 

var scrollView = Ti.UI.createScrollView({ 
    //... 
}); 

for(i=0;i < views.length;i++){ 

    //Calc the positions, not relevant 
    views[i].width = calculedValue; 
    views[i].height = calculedValue; 

    scrollView.add(views[i]); 
} 

win.add(scrollView); 

im使用鈦SDK 1.8.2和與iOS 5.0.1上的iPad 2運行。

回答

1

我解決評估的回調,而不是在事件偵聽器的JavaScript數據問題

view.load = function(serverData){ 
    webview.setUrl(serverData.url); 
    //Not on event 'beforeload' 
    //webview.addEventListener('beforeload', function(){ not on 
     webview.evalJS("var value="+serverData.value+";"); 
    //}); 
}; 

我認爲這是與UI線程相關的未在事件偵聽器,有時也被稱爲