Marionette Blase Veranstaltung von itemview zu übergeordneten layoutview?
Ich habe ein layout mit einem Bereich, in dieser region habe ich ein Element anzeigen, löst ein Ereignis aus, aber es scheint nicht zu sein, sprudelte der layout-Ansicht. Mache ich etwas falsch oder ist dieses Verhalten? Ich nehme an, die itemview Präfix nicht Hinzugefügt, wie die übergeordnete Ansicht ist nicht eine Sammlung? So oder so, der Fall ist nie geblasen, um die layout-Ansicht.
layoutView = Marionette.Layout.extend({
template: "#layout-template",
regions: {
titleRegion: "#job-title-region"
},
triggers: {
"save:clicked" : "onSaveClicked"
},
onSaveClicked: function (args) {
alert('Clicked');
}
});
childview = Marionette.ItemView.extend({
template: "#child-template",
triggers: {
"click .js-save": "save:clicked"
}
});
UPDATE:
Sehen diese Geige http://jsfiddle.net/7ATMz/11/ ich schaffte es, die layout-Ansicht zu hören, um das Kind Events, aber ich habe, es zu verdrahten außerhalb der layout-Ansicht selbst und brechen die Kapselung. Kann ich dies in der layout-Sicht in überhaupt?
Dank,
Jon
InformationsquelleAutor Jon | 2013-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Löst nicht ganz, wie das funktioniert: Ihr layout ist mit Ihnen falsch. Trigger sind eine Bequemlichkeit, um ein Ereignis auszulösen Signalwirkung, die eine bestimmte Interaktion (z.B. Klick).
Was Sie wollen, ist zu verwenden triggerMethod (https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.functions.md#marionettetriggermethod) zum auslösen einer Funktion im layout. Sehen http://jsfiddle.net/ZxEa5/ im Grunde wollen Sie diese in Ihrem
show
Funktion:- Und in Ihrem layout:
Ereignis-bubbling nur passiert automagisch mit der Sammlung?composite-Ansichten, denn Sie sind eng verbunden mit Ihren items. Wenn Sie möchten, ein layout zu überwachen oder eines Ihrer untergeordneten views festlegen muss, dass, bis auf Ihre eigenen.
Shameless plug: wenn Sie mehr darüber erfahren möchten, wie Sie zu strukturieren und bereinigen Sie Ihren code mit Marionette, können Sie check out my book ( https://leanpub.com/marionette-gentle-introduction ), wo diese Art von Konzept (und seine Anwendungen) näher erläutert.
InformationsquelleAutor David Sulc
Ich bin mir nicht sicher, wenn diese Marionette wurde die Funktion eingeführt, aber eine viel einfachere Lösung wäre die Verwendung der
childEvents
hash: http://marionettejs.com/docs/v2.4.1/marionette.layoutview.html#layoutview-childeventsKonnte man auch direkt binden das Kind event an eine Funktion außerhalb der LayoutView, ob es mehr Sinn macht, wie hier:
listenTo
sein Kind. Zum Beispiel:this.listenTo(this.announcementRegion.currentView, "poisonpill", () => { this.announcementRegion.empty() });
Nein, es funktioniert für mich sehr gut, ich habe versucht, diese für die CollectionView, LayoutView und CompositeView.
Dies ist eine große, up to date, das ist die Lösung!
InformationsquelleAutor kprist
Empfehle ich, mit Rückgrat.Kurier für diese Art von Notwendigkeit: https://github.com/rotundasoftware/backbone.courier
InformationsquelleAutor Derick Bailey
Implementiert habe ich eine Lösung für ein ähnliches problem wie folgt. Zuerst schrieb ich eine neue Methode, rechts in die Marionette.View Prototyp:
Aufrufen, werden regelmäßige
triggerMethod
von Marionette zweimal: einmal mit Ihrem event-Namen, wie es gedacht ist, um behandelt werden, und eine zweite, die ist leicht erkennbar durch die spezielle sichten, benannt nach bubble Veranstaltungen.Dann müssen Sie solche speziellen Ansicht und Blase Ereignisse, die dazu gedacht sind sprudelte. Sie müssen vorsichtig sein, nicht zu lösen Ereignisse aus, wie
close
(oder jede Marionette events") im Auftrag von anderen Ansichten, denn das wird dazu führen, dass alle Arten von unvorhersehbaren Verhaltensweisen in den Regionen und Ansichten. Die:bubble
suffix können Sie leicht erkennen, was gemeint Blase. Die sprudelnden anzeigen könnte wie folgt Aussehen:Das Letzte, was Sie brauchen, um sicherstellen zu können bubble Veranstaltungen in den Regionen (für Layouts und Module mit benutzerdefinierten region Manager). Behandelt werden können mit der
show
- Ereignis auslöst, aus einer region, wie hier:Den letzten Teil zu machen, ist tatsächlich etwas, sprudeln, das ist einfach in der Handhabung durch die neue
bubbleMethod
Methode:Jetzt können Sie Griff sprudelte Ereignisse von einer beliebigen Stelle in Ihrem code, wo Sie Zugriff auf eine Instanz von
BubblingLayout
.InformationsquelleAutor Grancalavera
Warum es nicht zulassen, dass das click-Ereignis zu Blasen-bis die DOM-Hierarchie und behandeln Sie in Ihrem Layout-Ansicht? So etwas wie dieses (fiddle hier):
Sorry, es war ein bisschen eine Vermutung, wirklich. Das click-Ereignis sollte, sprudeln die DOM-Hierarchie, um Ihre layout-Sicht sowieso, so dass Sie sollten in der Lage sein, es zu fangen in Ihrem Layout mit den üblichen Event-Objekt.
Könnten Sie zusammen eine einfache jsfiddle.net Beispiel?
Sicher finden Sie in diesem jsfiddle.net/7ATMz/11 ich schaffte es, die layout-Ansicht zu hören, um das Kind Events, aber ich habe, es zu verdrahten außerhalb der layout-Ansicht selbst und brechen die Kapselung.
Ihre Geige wirft einen Fehler für mich in Chrom.
InformationsquelleAutor net.uk.sweet