mrjerk: dynamische Liste aus Arrays

Beitrag lesen

Hallo,
Ich würde da vom objekt-orientierten Standpunkt her herangehen:
Was ist ein Menu?
Ein Menu-Element bestehe aus

  • einem Titel
  • (optional) einer Liste von Untermenus
  
function MyMenu(title) {  
   this.title = title;  
   this.items = new Array();  
}  
MyMenu.proptotype.addItem = function (item) {  
   this.items.push(item);  
}  
  
// Build a little Menu  
var menu = new MyMenu("Testmenu");  
var untermenu = new MyMenu ("Untermenu");  
menu.addItem(untermenu);  
untermenu.addItem(new MyMenu("Unteroption1"));  
untermenu.addItem(new MyMenu("Unteroption2"));  
  
// Traversing Menu  
for (var i = 0; i< menu.items.length; i++) {  
   var untermenu = menu.items[i];  
   if (untermenu.items.length > 0) {  
      // weitere untermenus  
   }  
   else {  
     // keine untermenus  
   }  
}  

Bei komplexeren Menustrukturen wird das Aufbauen wie unter "Build a little Menu" beschrieben ggf. etwas umständlich.
Du solltest daher vielleicht den "MyMenu"-Konstruktor so bauen, dass Du ihm einfach JSON-Daten übergeben kannst:

  
function MyMenu(jsonObj) {  
   if (typeof(jsonObj.title) == "undefined") {  
      // every menu needs at least a title  
      throw "This seams to be not a valid menu";  
   }  
   this.title = jsobObj.title;  
   this.items = new Array();  
   if ((typeof(jsonObj.items) != "undefined") && (jsonObj.items.length)) {  
      for (var i = 0; i < jsobObj.items.length; i++) {  
         this.items.push(new MyMenu(jsonObj.items[i]));  
      }  
   }  
  
}  
  

// And here we go:
var menu = new MyMenu ({'title' : 'Testmenu', items : [{'title' : 'untermenu', items : [...]}]});

Hoffe es sind nicht so viele Tippfehler drin, und es hilft Dir weiter.

Viele Grüße,
Jörg