2014-03-06 10 views
13

Ich habe diesen Code, der, wenn Symbol-Edit-Bereich angeklickt wird, eine Aktion auslöst, die ein Modal öffnet, jedoch zur gleichen Zeit den Klick propagiert, um die Ansicht darunter (PersonView). Ich möchte, dass die Aktion ausgeführt und die Weitergabe gestoppt wird.Stop Klick Ausbreitung von Ember Aktion?

Die einzige Lösung, die ich mir vorstellen kann, besteht darin, das Icon-Edit zu einer eigenen Ansicht zu machen und die Click-Propagation zu stoppen, indem false in method click zurückgegeben wird. Gibt es einen anderen Weg, dies zu tun, ohne eine andere Sichtweise zu haben?

HBS:

{{#view Blocks.PersonView}} 
    <span class="inline pull-right icon-edit" {{action 'modalOpen' 'modifyPersonPopup' 'modifyPerson' this}}></span> 
    <p class="inline pull-left person-name">{{firstNameDelayed}}</p> 
{{/view}} 
+0

Gibt es einen Click-Ereignis Haken bereits in PersonView genannt hinzufügen und gehen Sie mit einem Klick in der modalOpen Aktion? –

+0

Es gibt einen Klickereignis-Hook in der Personenansicht – Jaime

+0

Eine Option ist das Ereignis.target in PersonView zu betrachten. Wenn das Ziel ".icon-edit" lautet, rufen Sie mit dem Em.ViewtargetActionSupport-Mix die Aktion modalOpen auf. Aber das ist immer noch ein bisschen hacky. Eventuell müssen Sie event.preventDefault(); und event.stopPropagation(); auch zusammen. –

Antwort

34

Sie können auch bubbles=false Parameter action-Tag (siehe http://emberjs.com/api/classes/Ember.Templates.helpers.html#toc_event-propagation)

+0

Dies ist eine viel bessere Antwort, die ich ursprünglich ausgewählt hatte. Ich habe das nur als Antwort gewählt! – Jaime

+0

Super! Genau das, wonach ich gesucht habe. BTW der Link zu Ember Doc erwähnt nichts auf Blasen. – AlvaroAV

+0

Höchstwahrscheinlich ist dies nicht mehr gültig für Ember 2.x (Sie werden automatisch über den obigen Link zum 2.x Guide-Abschnitt weitergeleitet), da dieser Artikel für Ember 1.x-Dokumente noch immer vorhanden ist. – undeletable

1

konnte ich den Klick mit jQuery abzufangen, aber die Logik ist zu böse. Diese Logik hält auch den Aktionshelfer vom Arbeiten ab. Ich würde lieber bei der Lösung bleiben, die eine Ember-Ansicht verwendet, um den Klick nicht zu verbreiten.

Nasty Lösung innerhalb personView:

Blocks.PersonView = Ember.View.extend({ 
    classNames: ['event-person-block', 'person', 'inline'], 
    classNameBindings: ['personActive'], 
    // Onclick toggles person selection. 
    click: function() { 
this.get('controller.parentController').send('personClicked',this.get('controller.content.id')) 
    } 
didInsertElement: function() { 
    this.$().find(".icon-edit").click(function(e) { 
    e.stopPropagation() 
    }) 
} 

})

Reiniger Lösung, die eine Ansicht mit dem die Spanne Symbol-edit Wraps:

Blocks.EditPersonIcon = Ember.View.extend({ 
    click: function() { 
     return false 
    } 
}) 
5

Versuchen Sie, die Aktion zu ändern:

modalOpen: function { 
    //code of your action 
    return false;  
} 

Das ist für mich in einer ähnlichen Situation arbeitet

+0

das funktioniert auch für mich – Jaime

+0

Tnx, bubble = false hat nicht geholfen aber das ja. –

+0

Hoffentlich haben Sie 'bubbles = false' versucht, was genau wie' return false; 'in der Aktion funktioniert. – Cristian

Verwandte Themen