gpt4 book ai didi

javascript - Titanium:显示自定义对象 - 变量未定义

转载 作者:行者123 更新时间:2023-11-30 03:14:25 25 4
gpt4 key购买 nike

我是 Titanium 和网络开发的新手。我正在尝试检索我创建并存储在 ACS 上的自定义对象。我花了几个小时在上面,但卡住了,因为我不知道如何从云端正确检索一组数据字段。我的代码可以编译,但 TableView 没有显示。我只看到标题和后退按钮。我相信错误在“Cloud.Objects.Query” block 内(它应该显示 4 个条目,每个条目都有日期、地点和评论),但我没有看到它们中的任何一个。我尝试使用警报,我不断收到的警报消息之一是“变量未定义”。有人可以看一下并给我一些提示吗?感谢您的宝贵时间。

    //Import the module
var Cloud = require('ti.cloud');
Cloud.debug = true; // optional; if you add this line, set it to false for production

// this sets the background color of the master UIView (when there are no windows/tab groups on it)
Titanium.UI.setBackgroundColor('#000');

exports.getDiaryWin = function() {

//create window
var diary_window = Titanium.UI.createWindow({
backgroundColor:'#FFF',
title: "Travel Diary"
});

//create title
var title = Titanium.UI.createLabel({
text: "My Travel Diary",
top:10,
color: '#008000',
textAlign: 'center',
font: {fontSize:55}
});

var tableView = Ti.UI.createTableView({
top: '10%',
scrollable: true,
width: '100%',
minRowHeight: '50',
bottom: '10%'
});

//Get diary entries, add them to the table view and display it
var idList = [];
var tableData = [];
var displayData = [];
var entry;

//Get diary id
Cloud.Objects.query({
classname: 'diaries',
page: 1,
per_page: 10
},function(e){
if (e.success){
alert('Count: '+e.diaries.length);

for (var i=0; i<e.diaries.length; i++)
{
entry = e.diaries[i];
/*
alert('id: ' + entry.id + '\n' +
'date: ' + entry.date + '\n' +
'place: ' + entry.place + '\n' +
'review: ' + entry.review + '\n' +
'created_at: ' + entry.created_at);
*/
tableData.push({
date: entry.date,
place: entry.place,
review: entry.review
});

alert('tableData:' + tableData.date); //ALERT: tableData: UNDEFINED

}
} else {
alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
}
});


/*
tableData.push({
date: 'Can u see this?'
});
*/

for (var i=0; i < tableData.length; i++){
var row = Ti.UI.createTableViewRow({
height:150,
backgroundColor : '#FF9900',
font: {fontSize:35},
title: tableData[i].date
});

/*
var dateField = Ti.UI.createLabel({
text:tableData[i].date,
font: {fontSize:35},
color:'#888',
left:5,
width:Ti.UI.FILL
});
row.add(dateLabel);

var placeLabel = Ti.UI.createLabel({
text:tableData[i].place,
font: {fontSize:35},
color:'#888', left:5, width:Ti.UI.FILL
});
row.add(placeLabel);

var reviewLabel = Ti.UI.createLabel({
text:tableData[i].review,
font: {fontSize:35},
color:'#888',
left:5,
width:Ti.UI.FILL
});
row.add(reviewLabel);
*/
displayData.push(row);
}

tableView.setData(displayData);

//add a 'back' button
var back_button = Titanium.UI.createButton({
title: "Back",
buttom:20,
height:200,
left:40,
right:40
});

//Add Event Listener
back_button.addEventListener('click', function(){
//call an export function
var win = require('home').getHomeWin;

//create new instance
var nextWin = new win();
nextWin.open();
});


diary_window.add(title);
diary_window.add(tableView);
diary_window.add(back_button);
return diary_window;

};

------------编辑代码----------------

//Import the module
var Cloud = require('ti.cloud');
Cloud.debug = true; // optional; if you add this line, set it to false for production

// this sets the background color of the master UIView (when there are no windows/tab groups on it)
Titanium.UI.setBackgroundColor('#000');

exports.getDiaryWin = function() {

//create window
var diary_window = Titanium.UI.createWindow({
backgroundColor:'#FFF',
title: "Travel Diary"
});

//create title
var title = Titanium.UI.createLabel({
text: "My Travel Diary",
top:10,
color: '#008000',
textAlign: 'center',
font: {fontSize:55}
});

var tableView = Ti.UI.createTableView({
top: '10%',
scrollable: true,
width: '100%',
minRowHeight: '50',
bottom: '10%'
});

//Get diary entries, add them to the table view and display it
var idList = [];
var tableData = [];
var displayData = [];
var entry;

//Get diary id
Cloud.Objects.query({
classname: 'diaries',
page: 1,
per_page: 10
}, function(e) {
var row, dateLabel, placeLabel, reviewLabel;
var displayData = [];

if (e.success){
alert('Count: '+e.diaries.length);

for (var i=0; i<e.diaries.length; i++) {
entry = e.diaries[i];
row = Ti.UI.createTableViewRow({
height:150,
backgroundColor : '#FF9900',
font: {fontSize:35},
title: entry.date
});

dateLabel = Ti.UI.createLabel({
text: entry.date,
font: {fontSize:35},
color:'#888',
left:5,
width:Ti.UI.FILL
});
row.add(dateLabel);

placeLabel = Ti.UI.createLabel({
text: entry.place,
font: {fontSize:35},
color:'#888', left:5, width:Ti.UI.FILL
});
row.add(placeLabel);

reviewLabel = Ti.UI.createLabel({
text: entry.review,
font: {fontSize:35},
color:'#888',
left:5,
width:Ti.UI.FILL
});
row.add(reviewLabel);

displayData.push(row);
}

tableView.setData(displayData);
} else {
alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
}
});

//add a 'back' button
var back_button = Titanium.UI.createButton({
title: "Back",
buttom:20,
height:200,
left:40,
right:40
});

//Add Event Listener
back_button.addEventListener('click', function(){
//call an export function
var win = require('home').getHomeWin;

//create new instance
var nextWin = new win();
nextWin.open();
});


diary_window.add(title);
diary_window.add(tableView);
diary_window.add(back_button);
return diary_window;

};

最佳答案

错误“变量未定义”在 alert('tableData:' + tableData.date); 上触发,因为您试图访问整个数组的日期属性,而不是存储在其中的对象之一大批。例如,将其更改为:

alert('tableData:' + tableData[0].date);

您还应该将整个 for 循环移动到回调中。您必须等待 Cloud API 的响应才能开始填充您的 TableView:

Cloud.Objects.query({
classname: 'diaries',
page: 1,
per_page: 10
}, function(e) {
var row, dateField, placeLabel, reviewLabel;
var displayData = [];

if (e.success){
alert('Count: '+e.diaries.length);

for (var i=0; i<e.diaries.length; i++) {
entry = e.diaries[i];
row = Ti.UI.createTableViewRow({
height:150,
backgroundColor : '#FF9900',
font: {fontSize:35},
title: entry.date
});

dateField = Ti.UI.createLabel({
text: entry.date,
font: {fontSize:35},
color:'#888',
left:5,
width:Ti.UI.FILL
});
row.add(dateLabel);

placeLabel = Ti.UI.createLabel({
text: entry.place,
font: {fontSize:35},
color:'#888', left:5, width:Ti.UI.FILL
});
row.add(placeLabel);

reviewLabel = Ti.UI.createLabel({
text: entry.review,
font: {fontSize:35},
color:'#888',
left:5,
width:Ti.UI.FILL
});
row.add(reviewLabel);

displayData.push(row);
}

tableView.setData(displayData);
} else {
alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
}
});

关于javascript - Titanium:显示自定义对象 - 变量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20388655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com