Javascript 在一行中过滤多个标签(Appcelerator)
我已经创建了一个表,其中填充了远程数据。我使用创建xml的php脚本获取这些数据。xml看起来有点像这样:Javascript 在一行中过滤多个标签(Appcelerator),javascript,android,tableview,appcelerator-mobile,Javascript,Android,Tableview,Appcelerator Mobile,我已经创建了一个表,其中填充了远程数据。我使用创建xml的php脚本获取这些数据。xml看起来有点像这样: <kalender> <afhaaldag> <datum>Monday 30 January 2012</datum> <afval>GFT</afval> <afval>PMD</afval> <afval>Restafval
<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>
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);
}
});
问题是我的数组数据标签由于某种原因没有填充。当我在结束时在关闭函数之前发出警报时,我会收到一条奇怪的错误消息,它不会给我任何信息:
[Ljava.lang.Object;@43f0e008
有人能帮我一下吗,我真的被困在这个问题上了。在经历了很多挫折,但下了很大的决心后,我终于找到了解决办法。我做的是:我制作了一个子视图,因为标签必须在一行中出现,每行可以有多个标签,并将标签存储在该子视图上,即我在此之前得到的日期我还创建了一个新行,它基本上会在用户过滤后替换表中的原始行,我将这些信息存储在一个新数组中,该数组将在过滤后替换数据源
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);
});
希望它对其他人有用。让我知道:在最后一段代码中,您只需要for循环中的第一个setData