用户登录后,Meteor重新渲染模板

Boa*_*och 2 javascript templates rendering facebook-graph-api meteor

好吧我正在使用Facebook API图表当用户使用Facebook登录时获取用户朋友列表+朋友图片:

Template.user_loggedout.events({
    "click #fb": function (e, tmp) {
        Meteor.loginWithFacebook({
            requestPermissions: ['user_likes',
                'friends_about_me',
                'user_birthday',
                'email',
                'user_location',
                'user_work_history',
                'read_friendlists',
                'friends_groups',
                'user_groups']
        }, function (err) {
            if (err) {
                console.log("error when login with facebook " + err);
            } else {
                FB.api('/' + Meteor.user().services.facebook.id + '/friends', { fields: 'name,picture' }, function (response) {
                    if (response && response.data) {
                        friends = response.data
                    }
                })
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我得到朋友阵列里面有对象(表示为朋友).在某些时候,当用户点击链接时我想向用户显示他的朋友列表.所以我得到了这个HTML:

Template.add_friends.helpers({
    friends_list: friends
});

template name="add_friends">
    <div class="friends_Page">
           {{#each friends_list}}
        <li>{{name}}</li>
        {{/each}}
    </div>
</template>
Run Code Online (Sandbox Code Playgroud)

问题是,在应用程序启动后以及用户使用Facebook单击登录按钮时,friends对象会更新.那么当我从facebook graph api获得回调时如何重新渲染?我不想将朋友存储在数据库中(由于facebook已经可以使用)

Hub*_* OG 6

更改数据时强制重绘的最自然方式是使用对该数据的依赖.

var friends = [];
var friends_dep = new Deps.Dependency();

Template.myTemplate.friends_list = function() {
    friends_dep.depend();    /* Causes the helper to rerun when data changes */
    return friends;
};

...

function callback() {
    ...
    friends = response.data;
    friends_dep.changed();    /* Call this after you set the new data */
}
Run Code Online (Sandbox Code Playgroud)