我有一个带有2个可能的HTML块的Meteor模板,具体取决于条件:already_facebook_authed
。如下代码所示,already_facebook_authed
是Session变量的结果,并且该Session变量是异步设置的。似乎在渲染模板时,Session变量(因此是already_facebook_authed
)是错误的,因此当尝试将点击处理程序绑定到#deauth_facebook_button
时,该变量尚不存在,因为它位于另一个尚未存在的块中呈现。
如何将点击处理程序绑定到#deauth_facebook_button
?也许在渲染某个DOM元素时会有一些回调,我可以在其中实例化此单击处理程序?
------------
-- auth.html
<template name="accounts_auth_with_facebook">
{{#if already_facebook_authed}}
<div class="col-md-4">
<button id="deauth_facebook_button" class="btn btn-primary"> Deauth Facebook </button>
</div>
{{else}}
<div class="col-md-4">
<div id="facebook_button"> Authenticate with FB </div>
</div>
{{/if}}
</template>
----------
-- auth.js
Template.accounts_auth_with_facebook.rendered = function () {
$('#facebook_button').unbind('click.auth').bind('click.auth', function() {
// some handler code
});
$('#deauth_facebook_button').unbind('click.deauth').bind('click.deauth', function() {
// some other handler code
});
};
Template.accounts_auth_with_facebook.already_facebook_authed = function() {
Meteor.call('get_composer_id', function (error, result) {
if (blah blah blah) {
Session.set('logged_in_with_facebook', true);
}
});
return Session.get('logged_in_with_facebook');
};
最佳答案
不要使用jQuery在Meteor模板上设置点击处理程序,请使用Meteor标准事件机制:
Template.accounts_auth_with_facebook.events({
"click #facebook_button":function(event,template){
// some handler code
}
"click #deauth_facebook_button":function(event,template){
// some other handler code
}
});