我目前正在开发一个从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/
有人对我有建议吗?
答案 0 :(得分:0)
您的路线中的任何地方都有model()
个挂钩吗?我看到beforeModel()
挂钩来处理转换,但不是模型调用。它存在于您的ApplicationRouteMixin
吗?
model() {
return this.fetchCurrentUser();
}
模型调用通常是您的ajax请求所在的位置。然后model()
的结果将传递给setupController
。 Controller允许您在模板/视图中访问数据。 setupController
基本上可以:
setupController(controller, model) {
Ember.set(controller, 'model', model);
}
这是自动调用的,但没有model()
调用,它什么都不做。组件是无状态的 - 这意味着它们只能访问我们传递给它们的数据。所以,如果你现在有这个model
钩子,那么我们可以把它传递给我们模板中的组件:
{{our-component model=model}}
model
返回我们的数据 - > setupController
在控制器上设置该数据 - > controller
允许我们在模板上访问该数据并将其传递给我们的组件。
如果这有帮助,请告诉我。如果这没有帮助,请随意发布关于您的mixin的更多信息。