我创建了一个用远程数据填充的表。我正在使用创建xml的php脚本获取此数据。 xml看起来有点像这样:
<kalender>
<afhaaldag>
<datum>Monday 30 January 2012</datum>
<afval>GFT</afval>
<afval>PMD</afval>
<afval>Restafval</afval>
</afhaaldag>
<afhaaldag>
<datum>Monday 06 February 2012</datum>
<afval>GFT</afval>
<afval>Snoeiresten</afval>
</afhaaldag>
</kalender>
我设法将所有信息都放在正确的位置。每个'afhaaldag在我的表中有一行,每个标签里面都有一个标签。它看起来像这样:
Monday 30 January 2012
GFT
Snoeiresten
Restafval
Monday 06 February 2012
GFT
Snoeiresten
我正在使用此循环为'afval'添加多个标签:
var allAfval = item.getElementsByTagName('afval');
var subView = Ti.UI.createView({bottom:10});
for(var j = 0; j<allAfval.length; j++)
{
var afval = allAfval.item(j).text;
var subLabel = Titanium.UI.createLabel({
text:afval,
color:'black',
left:15,
top:topPosition+20
});
topPosition +=20;
subView.add(subLabel);
subLabel.catId = afval;
dataLabels.push(subLabel);
}
row.add(subView);
table.appendRow(row);
现在我想让用户过滤标签,但由于我在一行中有多个标签,我不能使用我之前的解决方案(在我添加更多'afval'标签之前,它工作正常)。要进行过滤,我使用了一个选择器,使用了这个eventListener:
picker.addEventListener('change', function(e)
{
var filteredLabels = [];
for(var k=0; k<dataLabels.length; k++)
{
if(e.row.id == 'alles')
{
filteredLabels = dataLabels;
}
else if(dataLabels[k].catId == e.row.id)
{
filteredLabels[filteredLabels.length] = dataLabels[k];
}
table.setData(filteredLabels);
}
});
问题是我的数组dataLabels由于某种原因未被填充。当我在结束时(在关闭我的函数之前)发出警报时,我得到了这个奇怪的errorMessage(它没有给我任何信息):
[Ljava.lang.Object; @ 43f0e008
有人可以帮助我,我真的很难接受。
答案 0 :(得分:0)
var allAfval = item.getElementsByTagName('afval');
var subView = Ti.UI.createView({bottom:10});
for(var j = 0; j<allAfval.length; j++)
{
var afval = allAfval.item(j).text;
var subRow = Ti.UI.createTableViewRow();
var subLabel = Titanium.UI.createLabel({
text:afval,
color:'black',
left:15,
top:topPosition+20
});
var subLabelDate = Titanium.UI.createLabel({
text:datum,
color:'black',
font:{fontWeight:'bold'},
left:15,
top:topPosition
});
topPosition +=20;
subRow.add(subLabel);
subRow.add(subLabelDate);
subView.add(subLabel);
subRow.catId = afval;
dataLabels[y++] = subRow;
}
row.add(subView);
使用此eventListener,我会过滤表格,并为用户提供他们想要的信息。数据是原始数据源(因此,如果用户想要查看他们将获得原始表的所有事件,如果他们想要特定事件,他们将获得新数据源)
picker.addEventListener('change', function(e)
{
var filteredData = [];
for(var k=0; k<dataLabels.length; k++)
{
if(e.row.id == 'alles')
{
filteredData = data;
}
else if(dataLabels[k].catId == e.row.id)
{
filteredData[filteredData.length] = dataLabels[k];
}
table.setData(filteredData);
}
table.setData(filteredData);
});
希望它对其他人有用。让我知道:))