Bootboxjs: Wie man eine Meteor-Vorlage als Dialogkörper rendert

Ich habe folgende Vorlage:

<template name="modalTest">
    {{session "modalTestNumber"}} <button id="modalTestIncrement">Increment</button>
</template>

Dassession helfer ist einfach ein vermittler mit demSession Objekt. ich habe dasmodalTestNumber initialisiert auf0.

Ich möchte, dass diese Vorlage mit all ihrer Reaktivität in einen modalen Bootbox-Dialog gerendert wird. Ich habe den folgenden Ereignishandler für diese Vorlage deklariert:

Template.modalTest.events({
    'click #modalTestIncrement': function(e, t) {
        console.log('click');
        Session.set('modalTestNumber', Session.get('modalTestNumber') + 1);
    }
});

Hier sind all die Dinge, die ich ausprobiert habe und zu denen sie führen:

bootbox.dialog({
    message: Template.modalTest()
});

Dadurch wird die Vorlage gerendert, die mehr oder weniger aussieht0 Increment (in a button). Wenn ich jedoch das ändereSession Variable von der Konsole, es ändert sich nicht und die Ereignisbehandlungsroutine wird nicht aufgerufen, wenn ich auf die Schaltfläche (die Schaltfläche) klickeconsole.log passiert nicht einmal).

message: Meteor.render(Template.modalTest())

message: Meteor.render(function() { return Template.modalTest(); })

Diese beiden machen genau das Gleiche wie dieTemplate von selbst anrufen.

message: new Handlebars.SafeString(Template.modalTest())

Dies macht den modalen Körper einfach so leer. Der Modal taucht aber immer noch auf.

message: Meteor.render(new Handlebars.SafeString(Template.modalTest()))

Genau das gleiche wie dasTemplate und reinMeteor.render Anrufe; Die Vorlage ist vorhanden, hat jedoch keine Reaktivität oder Ereignisreaktion.

Ist es vielleicht, dass ich benutzedies weniger Verpackung von Bootstrap eher als ein Standardpaket?

Wie kann ich dies im entsprechend reaktiven Meteor-Stil rendern lassen?

In Bootbox hacken?

Ich habe gerade versucht, gehackt in diebootbox.js Datei selbst, um zu sehen, ob ich übernehmen könnte. Ich habe die Dinge so geändert, dass ambootbox.dialog({}) Ebene Ich würde einfach den Namen der Vorlage übergeben, die gerendert werden soll:

// in bootbox.js::exports.dialog
console.log(options.message); // I'm passing the template name now, so this yields 'modalTest'

body.find(".bootbox-body").html(Meteor.render(Template[options.message]));

body.find(".bootbox-body").html(Meteor.render(function() { return Template[options.message](); }));

Diese beiden verschiedenen Versionen (keine Sorge, es handelt sich um zwei verschiedene Versuche, nicht gleichzeitig) rendern beide die Vorlage nicht reaktiv, genau wie zuvor.

Wird das Hacken in die Bootbox einen Unterschied machen?

Danke im Voraus!

Antworten auf die Frage(5)

Ihre Antwort auf die Frage