我试图在Facebook用户登录时显示Facebook图片,并在非Facebook用户登录时显示占位符。
我在user_page html中创建了一个if语句:
{{#if facebookuserloggedin}}
TRUE
<img src="http://graph.facebook.com/{{facebookuser}}/picture/picture?type=large" alt="{{user}}">
{{else}}
False
<img src="user.png" alt="stanley">
{{/if}}
<h1>Welcome {{user}}</h1>
和一个检查facebook登录状态的助手
facebookuserloggedin: function(){
FB.getLoginStatus(function (response) {
console.log (response)
if (response.status === 'connected') {
(alert ("true"))
return true
}
else {
(alert("false"))
return false
}
});
由于某种原因,警报显示帮助程序返回true(当facebook用户登录时),但html页面显示为false。因此,占位符显示而不是facebook个人资料图片。我真的不知道这是怎么回事,任何人都可以帮助我吗?提前致谢。
答案 0 :(得分:2)
正如@apendua所说,辅助函数是同步的,而你调用异步函数。简而言之,这意味着您编写的return
语句不是帮助函数的返回语句,而是您传递给FB.getLoginStatus
的函数。请注意,您使用了function
关键字两次,因此您在那里有两个函数,并且return语句是错误的。
对于初学者来说这是一个常见的陷阱,所以不用担心,这很容易解决。它需要将你的状态存储在另一个地方(比如一个局部变量)并反复观察它。
这里可以使用的模式很少。首先,我建议在rendered
回调中调用异步函数,并为结果创建单独的依赖项。这应该可以让您最好地了解正在发生的事情。
var status = null
var statusDep = new Deps.dependency();
Template.templateName.rendered = function() {
FB.getLoginStatus(function(response) {
...
if(...) {
status = true;
statusDep.changed();
} else {
status = false;
statusDep.changed();
}
});
};
Template.templateName.helpers({
facebookuserloggedin: function() {
statusDep.depend();
return status;
};
});