我试图使用Facebook评论(https://developers.facebook.com/docs/plugins/comments)。问题是它们只在刷新页面时才加载,所以如果我来自任何其他路由,我什么也没有加载。我在template.rendered中进行调用,当我到达页面时,无论是刷新还是从其他路径执行时都会正确执行。可能导致此行为的原因是什么?我试着调试这个,但是我看不到任何东西,我尝试过的任何东西都没有。欢呼声。
PS:根据评论中的要求 - Fb函数是一个通用的函数,如下所示:
function loadFbComments() {
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_GB/sdk.js#xfbml=1&appId=694645587257406&version=v2.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
}
我在Template.rendered中调用它:
Template.item.rendered = function(){
loadFbComments();
}
HTML:
<div class="fb-comments" data-href="http://developers.facebook.com/docs/plugins/comments/" data-numposts="5" data-colorscheme="light"></div>
路由器:
Router.route('/item/:_id', function () {
this.render('Item', {
path: '/:permalink',
data: function(){
var permalinkVar = this.params.permalink;
return Items.findOne({permalink: permalinkVar});
},
});
});
这实际上只是标准代码,我想这个问题与Iron Router有关,但它只是一个猜测。
答案 0 :(得分:0)
我最终将整个评论部分加载到另一个模板中,然后在布局模板(我的主模板)中加载一次。无论如何我在模态中使用注释,因此它默认是隐藏的。这对我有用。
答案 1 :(得分:0)
您需要重新加载包含fb注释的模板。
您可以使用tracker dependency或更新会话变量来执行此操作。
how to make a meteor template helper re-run/render after another template has rendered?