如何访问组件中的Facebook数据?

时间:2016-05-22 17:06:32

标签: facebook ember.js

我目前正在开发一个从Facebook获取数据的Ember.js应用程序。

我遇到的问题是我实际上不知道如何访问我的组件(js / hbs)中应用程序路径中提取的数据。

我使用ember-simple-auth和torii进行身份验证和数据提取。

我的申请路线目前如下:

import Ember from 'ember';
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'

export default Ember.Route.extend(ApplicationRouteMixin, {
  fetchCurrentUser() {
    const data = this.get('session.data.authenticated');
    const {accessToken} = data;

    if (accessToken) {
      return new Promise(resolve => {
        FB.api('/me?fields=name,posts&access_token=' + accessToken, response => {
          resolve()
        })
      })
    }
  },

  beforeModel(transition) {
    this._super(transition);
    if (this.get('session.isAuthenticated')) {
      return this.fetchCurrentUser()
    }
  },

  actions: {
    login() {
      return this
        .get('session')
        .authenticate('authenticator:torii', 'facebook-connect')
        .then(() => {
          this.fetchCurrentUser();
        })
        .catch(err => console.error(err));
    },

    logout() {
      return this
        .get('session')
        .invalidate()
    }
  }
});

我已经搜索了一种方法,但大部分信息已经过时了。

你可以找到一个旋转https://www.facebook.com/help/383440231709427/

有人对我有建议吗?

1 个答案:

答案 0 :(得分:0)

您的路线中的任何地方都有model()个挂钩吗?我看到beforeModel()挂钩来处理转换,但不是模型调用。它存在于您的ApplicationRouteMixin吗?

model() {
  return this.fetchCurrentUser();
}

模型调用通常是您的ajax请求所在的位置。然后model()的结果将传递给setupController。 Controller允许您在模板/视图中访问数据。 setupController基本上可以:

setupController(controller, model) {
  Ember.set(controller, 'model', model);
}

供参考:https://github.com/emberjs/ember.js/blob/c7db394fe322dcfee0c79a58334103e2dc87a3a1/packages/ember-routing/lib/system/route.js#L1629-L1635

这是自动调用的,但没有model()调用,它什么都不做。组件是无状态的 - 这意味着它们只能访问我们传递给它们的数据。所以,如果你现在有这个model钩子,那么我们可以把它传递给我们模板中的组件:

{{our-component model=model}}

model返回我们的数据 - > setupController在控制器上设置该数据 - > controller允许我们在模板上访问该数据并将其传递给我们的组件。

如果这有帮助,请告诉我。如果这没有帮助,请随意发布关于您的mixin的更多信息。