2016-04-09 15 views
0

Das Problem ist, dass ich zwei Ebenen Menü haben möchte. Die zweite Ebene für jedes Menüelement wird nach dem Klick angezeigt. Wenn Sie erneut klicken, sollten Untermenüs ausgeblendet werden. Also dachte ich mir, dass ich das tun kann, indem ich die CSS-Klasse in den Menüelementen der ersten Ebene umschalte.Ember ändern Objekteigenschaft in Aktion

Component.js - bis jetzt möchte ich 2 Hauptmenüelemente haben.

menus: [{ 
      'name': 'Dashboard', 
      'icon': 'dashboard', 
      'active': false, 
      submenus: [{ 
       ... 
      }] 
     }, 
     { 
      'name': 'Settings', 
      'icon': 'cloud', 
      'active': false, 
      submenus: [{ 
       ... 
      }], 
     } 
    ], 

Und in der Vorlage erzeuge ich dynamisch HTML-Elemente. Ich habe die aktive Eigenschaft mit der Klasse verknüpft. Wenn sie sich in component.js ändert, sollte sie die CSS-Klasse beeinflussen.

{{#each menus as |menu|}} 
    <li class="collapsible" {{bind-attr class="menu.active:active"}} {{action 'toggle' menu}}> 
     <a ><span class="glyphicon glyphicon-{{menu.icon}}"></span>{{menu.name}}</a> 
     <ul> 
      {{#each menu.submenus as |submenu|}} 
       {{#link-to submenu.route activeClass="selected" tagName="li"}} 
        <a href=""><{{submenu.name}}</a> 
       {{/link-to}} 
      {{/each}} 
     </ul> 
    </li> 
{{/each}} 

So am Ende definiere ich eine einfache Aktion für aktive Parameter der ersten Ebene Menüs Makel.

Aber damit sagt, dass ich kein Element als String angegeben haben. Und wenn ich es in menu.toggleProperty('active') ändern, heißt es, dass toggleProperty keine Funktion ist.

Können Sie mich beraten? Danke

+0

Welche Version von Ember.js verwenden Sie? 'bind-attr' ist vor 2.0. – locks

+0

Es hört sich so an, als wäre 'menu' kein Ember.Object, also hätte es nicht die' toggleProperty' Methode zur Verfügung. – locks

+0

Ember-Version ist 2.3.0. Wenn ich im Logging-Menü bin, druckt es das Objekt korrekt, aber wenn ich versuche, toggleProperty auszuführen, sagt es, dass es keine Funktion ist. P. - Danke für den Beitrag – Bob

Antwort

1

Ich glaube, dass Sie diesen Fehler erhalten, weil menu kein Ember.Object ist. Sie könnten es manuell tun:

actions: { 
    toggle(menu) { 
    Ember.set(menu, 'active', !Ember.get(menu, 'active')); 
    } 
} 
+0

Vielen Dank! Ist es normal, dass dies kein Ember.Object ist? Und danke für den Hinweis, dass Bind-Attr veraltet ist :) – Bob

+0

Ja, ich glaube schon. Ember.js sollte Arrays in Ember.Array automatisch umbrechen, wenn Sie keine nativen Erweiterungen, aber keine Objekte haben. – locks

Verwandte Themen