2012-01-28 62 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