次のテンプレートがあります。
<template name="modalTest">
{{session "modalTestNumber"}} <button id="modalTestIncrement">Increment</button>
</template>
そのsession
ヘルパーは、単にSession
オブジェクトとの仲介者です。にmodalTestNumber
初期化しています0
。
このテンプレートを、そのすべての反応性とともに、ブートボックスのモーダル ダイアログにレンダリングしたいと考えています。このテンプレートに対して次のイベント ハンドラーを宣言しています。
Template.modalTest.events({
'click #modalTestIncrement': function(e, t) {
console.log('click');
Session.set('modalTestNumber', Session.get('modalTestNumber') + 1);
}
});
これが私が試したすべてのことであり、その結果は次のとおりです。
bootbox.dialog({
message: Template.modalTest()
});
これにより、多かれ少なかれ のように見えるテンプレートがレンダリングされます0 Increment (in a button)
。ただし、Session
コンソールから変数を変更しても変更されず、ボタンをクリックしてもイベントハンドラーは呼び出されconsole.log
ません (発生しません)。
message: Meteor.render(Template.modalTest())
message: Meteor.render(function() { return Template.modalTest(); })
Template
これらは両方とも、呼び出し自体とまったく同じことを行います。
message: new Handlebars.SafeString(Template.modalTest())
これは、モーダル本体を空としてレンダリングするだけです。ただし、モーダルはまだポップアップします。
message: Meteor.render(new Handlebars.SafeString(Template.modalTest()))
Template
および純粋なMeteor.render
呼び出しとまったく同じです。テンプレートはありますが、反応性やイベント応答はありません。
標準パッケージではなく、ブートストラップのこの少ないパッケージを使用している可能性がありますか?
これを適切に反応するMeteorスタイルでレンダリングするにはどうすればよいですか?
ブートボックスにハッキング?
ファイル自体をハッキングして、引き継げるbootbox.js
かどうかを確認しました。bootbox.dialog({})
レイヤーで、レンダリングしたいテンプレートの名前を渡すだけになるように変更しました。
// 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](); }));
これらの 2 つの異なるバージョン (同時にではなく、2 つの異なる試行であることを心配しないでください) は、以前と同様に、テンプレートを非反応的にレンダリングします。
ブートボックスをハッキングすると違いはありますか?
前もって感謝します!