在一行中过滤多个标签(Appcelerator)
filtering through multiple labels in one row (Appcelerator)
我创建了一个表,其中填充了远程数据。我通过创建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没有被填充。当我在最后发出警报时(就在我关闭功能之前),我收到了这个奇怪的错误消息(它没有给我任何信息):
[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);
});
希望它对其他人有用。让我知道:)
相关文章:
- 在<页眉>标签
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- iframe正在添加标签,需要删除它们
- 可以't使用Appcelerator将JSON文件解析为JavaScript中的TableView
- 如何自动调整标签的高度以适应内容
- Jquery标签插件粘贴问题
- Twitter引导程序Typeahead-Id&标签
- Highcharts-如何在自定义格式化程序中获得默认的y轴标签格式化程序
- Morris.js折线图x轴标签在调整大小后消失
- JavaScript goto 标签如何使用内部循环
- 显示某个用户ID的某个标签的30张Instagram图片
- 标签客户端的设置值
- 谷歌图表显示所有标签
- 如何在图片和边缘之间居中设置标签
- 在Datatables中设置本地化后,需要更改标签文本
- 第二组标签及其内容赢得'默认情况下t加载
- 在一个javascript文件中为整个网站创建标签
- 兰吉 |如何在 span 标签上使用单击事件删除突出显示的文本
- Knockout.JS标签在foreach内部不起作用
- 在一行中过滤多个标签(Appcelerator)