如何显示来自 ArrowDB 的单个对象的详细信息#appcelerator
How to show details from ArrowDB for individual objects #appcelerator
我已经从 ArrowDB 查询并获得了一个事件列表,现在我想要单击特定视图时每个事件的详细信息。我的代码如下所示有效,除了它将所有查询事件的详细信息放在打开的 window 上,并在顶部显示最后一个查询事件。
请问我该怎么做?我的大脑无法解决这个问题。
Cloud.Events.query(function (e) {
if (e.success) {
alert('Success:\n' + 'Count: ' + e.events.length);
for (var i = 0; i < e.events.length; i++) {
var event = e.events[i];
alert('id: ' + event.id + '\n' +
'name: ' + event.name + '\n' +
'start time: ' + event.start_time);
var holdview = Ti.UI.createView({
backgroundColor: '#d3d3d3',
backgroundImage: 'testview.png',
width: '85%',
height: '85%',
top: '5%'
});
//adding holdview to a scrollable view
xperiencesscrollableview.addView(holdview);
var testlabeltitle = Ti.UI.createLabel({
top: '5%',
width: '65%',
height: '10%',
left: '20%',
text: event.name
});
//it works well to this point and shows each event separately on views
holdview.add(testlabeltitle);
//adding forEach as suggested as an answer
e.events.forEach(function(event) {
holdview.addEventListener('click',function(e){
var detailstestname = Ti.UI.createLabel({
top: '5%',
width: '65%',
height: '10%',
left: '20%',
text: event.name,
color: 'black',
backgroundColor: 'white'
});
//Page for event details
eventdetailspage.open();
eventdetailspage.add(detailstestname);
});
});
//at this point it messes up
}
}
});
问题在于您使用的 for-loop 其代码块没有自己的作用域。当循环结束并处理 click
事件时,用于 detailstestname
标签的 event.name
将始终是最后一个循环的事件。
您可以使用闭包:
for (var i = 0; i < e.events.length; i++) {
(function(event) {
..
})(e.events[i]);
}
或使用.forEach()
:
e.events.forEach(function(event) {
..
});
我已经从 ArrowDB 查询并获得了一个事件列表,现在我想要单击特定视图时每个事件的详细信息。我的代码如下所示有效,除了它将所有查询事件的详细信息放在打开的 window 上,并在顶部显示最后一个查询事件。
请问我该怎么做?我的大脑无法解决这个问题。
Cloud.Events.query(function (e) {
if (e.success) {
alert('Success:\n' + 'Count: ' + e.events.length);
for (var i = 0; i < e.events.length; i++) {
var event = e.events[i];
alert('id: ' + event.id + '\n' +
'name: ' + event.name + '\n' +
'start time: ' + event.start_time);
var holdview = Ti.UI.createView({
backgroundColor: '#d3d3d3',
backgroundImage: 'testview.png',
width: '85%',
height: '85%',
top: '5%'
});
//adding holdview to a scrollable view
xperiencesscrollableview.addView(holdview);
var testlabeltitle = Ti.UI.createLabel({
top: '5%',
width: '65%',
height: '10%',
left: '20%',
text: event.name
});
//it works well to this point and shows each event separately on views
holdview.add(testlabeltitle);
//adding forEach as suggested as an answer
e.events.forEach(function(event) {
holdview.addEventListener('click',function(e){
var detailstestname = Ti.UI.createLabel({
top: '5%',
width: '65%',
height: '10%',
left: '20%',
text: event.name,
color: 'black',
backgroundColor: 'white'
});
//Page for event details
eventdetailspage.open();
eventdetailspage.add(detailstestname);
});
});
//at this point it messes up
}
}
});
问题在于您使用的 for-loop 其代码块没有自己的作用域。当循环结束并处理 click
事件时,用于 detailstestname
标签的 event.name
将始终是最后一个循环的事件。
您可以使用闭包:
for (var i = 0; i < e.events.length; i++) {
(function(event) {
..
})(e.events[i]);
}
或使用.forEach()
:
e.events.forEach(function(event) {
..
});