If you're new to Titanium and web development, you might be struggling with retrieving a custom object stored on ACS. Spending hours trying to figure it out can be frustrating, especially when you encounter errors like your table view not displaying correctly. The issue may lie within the "Cloud.Objects.Query" block where you expect 4 entries each with specific data fields like date, place, and review, but nothing seems to show up as intended. Your code compiles, but the expected content is missing. Alerts are showing undefined variables adding to the confusion. If anyone could spare some time to review and provide hints, it would be greatly appreciated.
//Importing the module
var Cloud = require('ti.cloud');
Cloud.debug = true; // optional; setting to false for production recommended
// Setting the master UIView background color when no windows/tab groups present
Titanium.UI.setBackgroundColor('#000');
exports.getDiaryWin = function() {
//Creating the window
var diary_window = Titanium.UI.createWindow({
backgroundColor:'#FFF',
title: "Travel Diary"
});
//Creating the 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%'
});
//Fetching diary entries, populating the table view, and displaying it
var idList = [];
var tableData = [];
var displayData = [];
var entry;
//Retrieving 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);
//Adding a 'back' button
var back_button = Titanium.UI.createButton({
title: "Back",
buttom:20,
height:200,
left:40,
right:40
});
//Adding Event Listener
back_button.addEventListener('click', function(){
//Calling an export function
var win = require('home').getHomeWin;
//Creating a new instance
var nextWin = new win();
nextWin.open();
});
diary_window.add(title);
diary_window.add(tableView);
diary_window.add(back_button);
return diary_window;
};
------------EDITED CODE --------------
//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;
};