iOS用のTitaniumモバイルアプリを構築しています。3 つの異なる画面について説明します。テーブルビューを持つホーム画面、「検索フィールド」を持つ「マスター」画面、および「詳細」画面。
ホーム画面からマスター画面に移動すると、ユーザーに検索フィールドとメッセージが表示されます。ユーザーが検索フィールドに単語を入力すると、メッセージを削除してテーブルを描画します。次に、リモート サーバー上の PHP ファイルを呼び出して、データベースでその単語を検索し、結果を JSON として返し、そのテーブルに表示します。ユーザーが結果の 1 つを選択すると、詳細画面が表示されます。そのすべてが意図したとおりに機能します。
この問題は、ユーザーがマスター ページに戻って別のクエリを実行したときに発生します。テーブルデータをクリアするボタンがあり、そのボタンはテーブルを効果的にクリアします。ただし、2 番目の検索の結果が表示され、いずれかを選択して詳細ページを表示すると、アプリは詳細画面を表示するように見えますが、その画面は引き続きスライド オフし、2 番目の詳細画面がスライドしてデータを表示します。
ユーザーがマスター ページに戻って 3 番目のクエリを実行すると、この同じ問題が倍増します。ここでもテーブルに結果が入力されますが、ユーザーが 1 つを選択すると、ユーザーにデータが表示される前に 2 つの詳細画面がスライドします。
上記と同じ方法で別のクエリを実行すると、ユーザーにデータが表示される前に 3 つの詳細画面がスライドします。
このパターンは、ユーザーがホーム画面に戻るまで詳細画面を増やし続けます。その後、すべてがリセットされたように見えます。コードのスニペットを次に示します。
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');
}
});
上記で説明した問題を引き起こしているこのコードのエラーはどこにありますか?