Показать сообщение отдельно
  #3 (permalink)  
Старый 20.09.2009, 00:20
Аватар для Paguo-86PK
Профессор
Отправить личное сообщение для Paguo-86PK Посмотреть профиль Найти все сообщения от Paguo-86PK
 
Регистрация: 16.09.2009
Сообщений: 253

Разобрался за несколько часов. Я забыл, что вместо getChildElements существует all[]...
В общем, 15 минут назад лишь добился генерации меню работающего.
Однако, смущает следующее:
function CreateMenu(items) {
 var i, s;
 var mnu = new Array();
 for(i = 0; i < items.length; ++ i) {
  itm = items[i];
  switch(itm.mode) {
  case "menu":
   mnu[mnu.length] = itm.caption;
   i += (mnus = CreateMenu(itm.all)).length - 1; // <-- Вот тут указатель i обязательно нужно сместить, чтобы снова не читать те же элементы
   for(j in mnus)                                // <-- А здесь необходимо искусственно сделать concat
    mnu[mnu.length] = mnus[j];
   break;
  case "button":
   mnu[mnu.length] = itm.caption + " " + itm.title + " " + itm.action + " " + " " + (itm.image ? itm.image : "");
   break;
...
  case "separator":
   mnu[mnu.length] = "";
   break;
  }
 }
 mnu[mnu.length] = ".";
 return mnu;
}
т.е. необходимо смещать указатель так, чтобы обойти дочерние элементы дочерного элемента. Как это обойти? Удалать дочерний элемент на лету вместе с его содержимым? Кривовато и не красиво

Последний раз редактировалось Paguo-86PK, 20.09.2009 в 00:23.
Ответить с цитированием