2013-05-29 5 views
0

Я выполняю итерацию по коллекции, возвращенной с сервера; это выглядит следующим образом:Доступ к объекту объекта через точечную нотацию

roster: Array 
    0: Object 
     avatar: null 
     contactName: "[email protected]" 
     contactType: "grouping" 
     displayName: "Joe Shmoe" 

Я создаю таблицу и пытается добавить «DISPLAYNAME» к нему, но доступ по точечной нотации не работает. Что не так с моим кодом ниже?

function createAddressBook() 
      { 
       var tbl = document.getElementById('addressBook_tbl'); 

       var tbdy = document.createElement('tbody'); 

       // cells creation 
       for(var j = 0; j <= roster.length; j++) 
       { 
        // table row creation 
        var row = document.createElement("tr"); 

        for(var i = 0; i < 2; i++) 
        { 
         // create element <td> and text node 
         //Make text node the contents of <td> element 
         // put <td> at end of the table row 
         var cell = document.createElement("td");  
         var cellText = document.createTextNode(roster[ j ].displayName); 

         cell.appendChild(cellText); 
         row.appendChild(cell); 
        } 

        //row added to end of table body 
        tbdy.appendChild(row); 
       } 

       // append the <tbody> inside the <table> 
       tbl.appendChild(tbdy); 
      } 
+1

и я держал пари, что он не работает с квадратным кронштейном нотация, так как вы не используете 'i', чтобы получить доступ к этому – letiagoalves

ответ

3

Вы используете j, когда вы определили i.

// ----------------v-------should be `i` 
"user: " + roster[ j ].displayName 

FYI, вы можете использовать .insertCell(-1) для добавления новой ячейки.

row.insertCell(-1) 
    .appendChild(document.createTextNode("user: " + roster[ j ].displayName)); 

EDIT: Хотя ваш обновленный код работает, у него есть одна ошибка.

Вы пытаетесь получить доступ к roster по индексу за его последним индексом. Поскольку индексы Array основаны на 0, последний индекс равен roster.length - 1, поэтому вы должны использовать < вместо <=.

// ---------------v 
for(var j = 0; j < roster.length; j++) 
+0

извините, просто обновил свой оригинальный пост, потому что он не показывал внешний контур с«J "определено. – fumeng

+1

Тогда ваш код отлично подходит для меня. http://jsfiddle.net/H2C8n/ –

+0

@fumeng: В вашем коде есть одна ошибка, которая не будет отображаться до конца цикла «roster». Я обновил свой ответ. –

Смежные вопросы