2015-01-15 14 views
9

Ich habe das Internet nach einer Lösung für dieses Problem durchforstet, aber keine gefunden. Ich habe eine benutzerdefinierte SideNavigationLinkComponent, die ein <li> um ein <a>-Tag und möglicherweise ein <ul> von untergeordneten Links umschließt.Bedingte Aktion Element mit Ember Lenker hinzufügen

Der Anker-Tag sieht wie folgt aus etwas: "Warum bist du nicht {{link-to}} mit"

<a href="{{unbound menu.parent.link}}" {{action "toggle"}}> 
    ... 
</a> 

du fragst. Es ist, weil menu.parent.link nicht garantiert ist, eine gültige Route zu sein; manchmal ist es so etwas wie #nav-collapsible-44, die {{link-to}} bricht.

Wie auch immer, der Punkt des Anker-Tages in dem obigen Code ist als entweder ein Top-Level-Link zu einer anderen Seite Ember oder eine Schaltfläche, die eine zusammenklappbare Liste des sublinks bewirkt, Drop-Down zu dienen.

Mein Problem ist, dass, solange ich {{action "toggle"}} auf dem Anker-Tag habe, der Link nicht überall geht (aber die Collapsibles arbeiten, der Teil von dem, was ich will). Also muss ich in der Lage bedingt hinzufügen {{action}}, so dass ich entweder Links, die zu anderen Seiten oder Schaltflächen gehen, die Dropdown-Felder zu erweitern, abhängig von dem Wert der einige boolesche Bedingung, die ich habe, erstellen kann.

Ich will nicht, dies zu tun haben:

{{#if condition}} 
    <a href="{{unbound menu.parent.link}}" {{action "toggle"}}> 
    ... 
    </a> 
{{else}} 
    <a href="{{unbound menu.parent.link}}"> 
    ... 
    </a> 
{{/if}} 

, die bisher der einzige Weg war ich gefunden habe, dieses Problem zu lösen. Es gibt eine Menge HTML in den Anchor-Tags und sicher, ich könnte ein Partial verwenden, um diese Struktur ein bisschen zu DRY zu machen, aber das ist nur ein Pflaster für einen Bananensplit.

Ich habe auch versucht,

if(!condition){ 
    return true; 
} 

in meiner "Toggle" Aktion, aber es hatte keine Wirkung.

+0

Warum nicht einfach passieren die 'menu.parent.link' als Parameter an die' toggle' Aktion verwenden und zu handhaben die Logik für den Übergang (oder nicht) dort? – rogMaHall

+0

Ich dachte auch daran, dann sah ich [diese Antwort] (http://stackoverflow.com/a/22432933/2069194). Ich finde es auch nicht sinnvoll, meinen Navigationslink in eine Ansicht zu verwandeln. Und da es in einer größeren Komponente verschachtelt ist, würde das Routing sehr schnell knifflig werden. Aber ich bin offen für Vorschläge! – IGNIS

+1

Sie sollten es definitiv so machen, wie @rogMaHall darauf hingewiesen hat. Wenn Sie eine Komponente erstellen müssen, die nicht aus dem Kontext isoliert ist, sollte es eine Ansicht sein. –

Antwort

7

Verwendung closure actions wie:

<a href="{{unbound menu.parent.link}}" onclick={{if condition (action 'toggle')}}> 
    ... 
</a> 
Verwandte Themen