2012-01-28 63 views
0

我创建了一个填充了远程数据的表格。我用一个创建xml的php脚本获取这些数据。该xml看起来有点像这样:通过一行中的多个标签进行过滤(Appcelerator)

<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'标签)。要做到我使用一个选择器过滤,这个事件监听:

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未填充的某些原因。 @ 43f0e008

;

[Ljava.lang.Object:当我在年底(之前,我闭上我的功能)我得到这个奇怪的errorMessage(不给我任何信息)做了一个警报

有人请帮助我,我真的坚持这一点。

回答

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); 
}); 

希望它是有用的给别人。让我知道:)

+0

在最后一段代码中,您只需要第一个setData(for循环内的一个) – 2012-02-01 10:46:01