/ / Wie erhalte ich die modale Dialoginstanz über die Bootstrap-Programmierschnittstelle? - Javascript, Twitter-Bootstrap-3

Wie erhalte ich die modale Dialoginstanz über die Bootstrap-Programmierschnittstelle? - Javascript, Twitter-Bootstrap-3

Das Szenario, das ich zu lösen versuche, ist zu deaktivieren, dass die Escape-Taste den Dialog schließt NACH Das Modal wurde instaniiert (der Dialog ist auf einen Ladezustand eingestellt). Also mit anderen Worten, nachdem ich meinen Modal so instaniiert habe:

(this.$el).modal("show");

Der Benutzer drückt eine Senden-Schaltfläche und der Dialog wird in einen Ladezustand versetzt. Ich möchte die Escape-Schaltfläche deaktivieren, da der Benutzer den Dialog in diesem Zustand nicht schließen kann.

Ich habe das versucht:

(this.$el).modal({ keyboard: false });

Aber es funktioniert nicht, anscheinend liest Bootstrap diese Optionen nur, wenn es den modalen Dialog aufruft ...

Meine Frage ist also, ob es möglich ist, einen Halt zu findender eigentlichen Bootstrap-Modal-Instanz, um das Options-Objekt ändern zu können? Laut Dokumentation sollte es möglich sein (oder habe ich die Dokumentation falsch verstanden?), Aber ich kann nicht herausfinden, wie.

Folgendes steht in der Dokumentation (http://getbootstrap.com/javascript/): Wenn Sie eine bestimmte Plugin-Instanz erhalten möchten, rufen Sie sie direkt von einem Element ab:

$("[rel="popover"]").data("popover").

Irgendwelche Ideen?

Antworten:

0 für die Antwort № 1

Ok, ich habe nach einigem Experimentieren herausgefunden, wie ich die modale Dialoginstanz in den Griff bekomme:

var bootstrapModalInstance = this.$el.data("bs.modal");

Und dann könnte ich die Optionen für die Instanz so einstellen:

bootstrapModalInstance.options.keyboard = !this.model.isSyncing;

Leider konnte das Problem dadurch nicht behoben werden, da der Escape-Key-Event-Listener während der modalen Instanziierung wie folgt eingerichtet wird:

Von bootstrap.js

 Modal.prototype.escape = function () {
if (this.isShown && this.options.keyboard) { // The event listener is setup on initalization
this.$element.on("keydown.dismiss.bs.modal", $.proxy(function (e) {
e.which == 27 && this.hide() // !!! Does not check the instance options.keyboard flag status, so I had to add && this.options.keyboard here
}, this))
} else if (!this.isShown) {
this.$element.off("keydown.dismiss.bs.modal")
}
}

Und wie ich im obigen Codekommentar schrieb, löste das Hinzufügen der Instanz options.keyboard check im Ereignis-Listener das Problem.