Modal schließen, das in einer anderen Ereignisfunktion erstellt wurde

8

Bei meinem ersten Event werde ich einen mbox-Dialog öffnen. mbox ist eine Art Erweiterung für die Bootbox, die Modal anzeigen soll. Ich brauche mbox, um eine andere Vorlage als modalen Inhalt zu verwenden.

Also wird das Modal mit dem Inhalt von createElement-Template geladen. Wenn der Benutzer einige Eingabeänderungen vorgenommen hat, sollte das Modal geschlossen werden. Daher gibt es die Funktion modal("hide") . Aber da bbox im ersten Template-Event gesetzt wurde und das Schließen des Modals im zweiten Template-Event erfolgt, hatte ich Probleme, das Modal zu schließen.

Ereignisse

%Vor%

AKTUALISIEREN

Das obige Problem funktioniert mit einem globalen Var. Danke für Adam dafür.

Aber ich würde nicht gerne ein Modal in einem Meteor-Paket zerstören, das von einem anderen Paket erstellt wurde. Ich habe versucht, eine globale Variable zu verwenden, und ich habe versucht, api.export() zu verwenden. Aber es funktioniert immer noch nicht. Ich habe auch versucht mit Sitzungen zu arbeiten.

Paketdiagramm / lib / client / graph.js

%Vor%

package-graph / lib / package.js

%Vor%

Das zweite Paket enthält eine typeahead-Suchbox ( sergeyt:typeahead ). Wenn Sie das Modal im ersten Paket erstellen, wird das Template in das Modal ( helloludger:mbox ) geladen. Jetzt kann der Benutzer über typeahead suchen und ein Element auswählen. Nach der Auswahl sollte das Modal durch 'modal' ('hide') zerstört werden.

Paketsuche / lib / client / events.js

%Vor%

Paketsuche / lib / client / helper.js

%Vor%     
user3142695 30.09.2015, 22:17
quelle

4 Antworten

8

Machen Sie bbox zu einer globalen Variable:

%Vor%     
Adam 30.09.2015, 22:32
quelle
2

Tun Sie das nicht - es verstößt gegen Software-Engineering-Prinzipien.

Der Grund, warum Sie Schwierigkeiten hatten, eine Lösung zu finden, ist ein starker Hinweis darauf, dass dies keine gute Möglichkeit ist, Ihre App zu strukturieren.

  • Sie möchten, dass packageMBox packageTypeAhead einbindet, was bedeutet, dass packageMBox von packageTypeAhead abhängt.

  • Und Sie möchten, dass packageTypeAhead in packageMBox greift und es steuert, was (Dank Gaelan) erfordert, dass packageTypeAhead von packageMBox abhängt.

Dies ist bidirektionale Kopplung , und selbst wenn Sie einen Weg finden, es zum Laufen zu bringen, was haben Sie erreicht? Sie haben zwei Pakete, von denen keines unabhängig verwendet werden kann (oder sogar richtig getestet wurde).

Die Lösung lautet also: Kombinieren Sie die beiden Pakete zu einem Paket .

Paket für alles ist eine gute Möglichkeit zur Strukturierung Ihre App, aber es ist wichtig zu überlegen, wie und wo Sie die Funktionalität aufteilen, damit Sie nicht mehr Probleme erstellen als bisher.

    
JeremyK 09.10.2015 04:58
quelle
1

Stellen Sie sicher, dass das zweite Paket eine Abhängigkeit von der ersten hat:

%Vor%

Nur Exporte von Abhängigkeiten sind verfügbar.

Relevant Meteor Dokumentation

    
Gaelan 08.10.2015 04:19
quelle
0

Wenn du mit globalen Variablen herumhackst, kannst du auch mit deinem mbox herumhacken.

%Vor%

und dann in package-search / lib / client / helper.js

%Vor%

Idealerweise würden Sie jedoch Ihr eigenes drittes unabhängiges Modul erstellen, um zwischen Ihren beiden Paketen zu kommunizieren und dieses in beide Pakete zu injizieren. Auf diese Weise sind sie nicht gekoppelt und können beide gemeinsam teilen.

In diesem geteilten Modul benötigen Sie nur eine Setter- und Getter-Funktion, die Ihre modale Instanz enthält. Ich bin mit Meteor nicht vertraut, also bin ich mir nicht sicher, wie Sie das machen werden, aber nach dem zu urteilen, was Sie bereits geschrieben haben, sollte es möglich sein.

Fügen Sie einen Kommentar hinzu, wenn Sie durcharbeiten möchten.

    
electrichead 09.10.2015 21:22
quelle

Tags und Links