我正在为 iOS 构建一个 Titanium 移动应用程序。我将提到三个不同的屏幕;主屏幕有一个表格视图,一个“主”屏幕有一个“搜索字段”和一个“详细”屏幕。
当我从主屏幕导航到主屏幕时,用户会看到一个搜索字段和一条消息。当用户在搜索字段中键入一个单词时,我删除消息并绘制一个表格,然后我调用远程服务器上的一个 PHP 文件来搜索该单词的数据库并将结果作为 JSON 返回并显示在该表格中。当用户选择其中一个结果时,将显示详细信息屏幕。所有这些都按预期工作。
当用户返回到母版页并执行另一个查询时,就会出现此问题。我有一个清除表格数据的按钮,该按钮有效地清除表格。但是,当显示第二次搜索的结果并选择查看详细信息页面时,应用程序会显示详细信息屏幕,但该屏幕继续滑出,第二个详细信息屏幕滑上并显示数据。
如果用户返回到母版页并执行第三个查询,同样的问题会成倍增加。表格再次填充了结果,但是当用户选择一个时,在向用户呈现数据之前会滑过两个详细信息屏幕。
如果以与上述相同的方式执行另一个查询,则在向用户呈现数据之前会滑过三个详细信息屏幕。
这种模式会继续增加细节屏幕,直到用户返回主屏幕。然后一切似乎都重置了。这是代码片段:
var win = Titanium.UI.currentWindow;
var appsponsor = Ti.UI.createButton({});
win.add(appsponsor);
appsponsor.addEventListener('click',function(e){});
var customSearchBar = Ti.UI.createView({});
var customSearchField = Ti.UI.createTextField({});
customSearchBar.add(customSearchField);
win.add(customSearchBar);
var nolist= Ti.UI.createLabel({});
win.add(nolist);
var businessowner = Ti.UI.createLabel({});
win.add(businessowner);
var view = Ti.UI.createView({});
var table = Ti.UI.createTableView({});
view.add(table);
var message = Ti.UI.createLabel({});
var clear = Ti.UI.createButton({
title: "Clear",
style:Titanium.UI.iPhone.SystemButtonStyle.BORDERED
});
clear.addEventListener("click", function() {
message.hide();
table.setData([]);
tableData = [];
});
Ti.UI.currentWindow.setRightNavButton(clear);
var tableData = [];
function checkInternetConnection(){
return Ti.Network.online ? true : false;
}
customSearchField.addEventListener("return", function(e) {
if(checkInternetConnection()){
nolist.hide();
businessowner.hide();
win.add(view);
var url = "http://mydomain.com/dir/file.php?title="+e.value;
var xhr = Ti.Network.createHTTPClient({
onload: function() {
Ti.API.debug(this.responseText);
var json = JSON.parse(this.responseText);
if (json.cms_list.length< 1){
win.add(message);
}
for (i = 0; i < json.cms_list.length; i++) {
client = json.cms_list[i];
row = Ti.UI.createTableViewRow({});
var clientlist = Ti.UI.createLabel({});
row.add(clientlist);
tableData.push(row);
}
table.addEventListener('click',function(e){
var row = e.row;
var clientlist = row.children[0];
var win = Ti.UI.createWindow({
url: 'clientdetail.js',
title: clientlist.text
});
var clientlist = clientlist.text;
win.clientlist = clientlist;
Ti.UI.currentTab.open(win,{animated:true});
});
table.setData(tableData);
},
onerror: function(e) {
Ti.API.debug("STATUS: " + this.status);
Ti.API.debug("TEXT: " + this.responseText);
Ti.API.debug("ERROR: " + e.error);
alert('There was an error retrieving the remote data. Try again.');
},
timeout:5000
});
xhr.open("GET", url);
xhr.send();
}
else{
alert('Your internet connection is not available');
}
});
我在这段代码中的错误在哪里导致它产生了我上面解释的问题?