2013-07-11 73 views
0

我推以下項的數組:表屬性出現未定義

data.push({ 
      title: items.item(i).getElementsByTagName("title").item(0).text, 
      leftImage: "News Story.png", 
      dataToPass: items.item(i).getElementsByTagName("content:encoded").item(0).text, 

      className: "TableRow", 
      hasChild: true, 
      js:"external.js" 
     }); 

我設置這個陣列是一個表的數據源。

table.data = data; 

這工作正常,表顯示爲願望。然而,然後我有一個事件監聽器,當點擊一行表格時。因爲我有一個條件測試,如果它有一個js屬性,並且它有一個dataToPass屬性,並且返回false,任何人都可以解釋這個嗎?

table.addEventListener("click", function (e){ 

if(e.source.title){ 
      alert("has title"); 
     } 

if (e.source.dataToPass){ 
      alert ("got data"); 
     } 
if (e.source.js){ 
      alert("has js"); 
     } 

我收到有標題但沒有獲得數據的警報。爲什麼?

+0

更throuroughly記錄你確定表數據直接映射到DOM元素上的屬性? e.source是甚至正確的DOM元素嗎?這裏沒有足夠的信息供任何人提供幫助。 – jbabey

+0

@ jbabey如果我正在打印e.source.title並且它打印了所需的輸出,所以'e'部分不是問題。我應該包括整個js嗎? – user2363025

回答

1

當您從JSON對象創建錶行,你必須從rowData對象訪問數據,試試這個:

table.addEventListener("click", function (e){ 
    if(e.source.title){ 
      alert("has title"); 
    } 

    if (e.rowData.dataToPass){ 
      alert ("got data"); 
    } 
}); 

這在API.

+0

謝謝!我仍然不明白爲什麼它適用於某些元素,但不是它們全部,但真誠地感謝您修復它 – user2363025

+0

有些人會稱這爲一個錯誤,如果您將行添加到表件餐中,那麼您必須訪問數據無論是通過e.source還是e.row,但是當您像使用JSON對象一樣創建它時,您必須使用e.rowData。 –

+0

您好Josiah我推送項目到數據數組,然後將這些添加到rowData數組,以創建一個表的自定義行。這工作正常。我現在需要知道如何在用戶點擊特定行時訪問這些內容。我以前使用你的解決方案,即e.rowData.title等來訪問這些元素時,我有一個基本的表,但現在它是一個自定義表,這是行不通的。 e.row和e.source不工作:/如果您有空閒時間請參閱上面的eited代碼!!! – user2363025