如何访问组件javascript文件中的属性?

时间:2016-06-05 16:20:12

标签: javascript ember.js

我目前正在开发一个ember应用程序。

目前我正在尝试访问在组件js文件中的路由中设置的属性。

整体是从路径内的Facebook Graph API(作为某种模型)获取数据,而不是访问组件内的这些数据以在地图上绘制点。

我的模板如下所示:

// map.hbs
{{map-widget posts=posts}}

我的路线如下:

// routes/world.js
import Ember from 'ember';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';

export default Ember.Route.extend(AuthenticatedRouteMixin, {
  fetchAllGeotaggedPosts() {
    return new Promise((resolve, reject) => {
      let postsArr = [];
      function recursiveAPICall(apiURL) {
        FB.api(apiURL, response => {
          if (response && response.data) {
            // Add response to posts array (merge arrays), check if there is more data
            postsArr = postsArr.concat(response.data);
            if (response.paging && response.paging.previous) {
              recursiveAPICall(response.paging.previous);
            } else {
              // console.log(postArr)
              resolve(postsArr);
            }
          } else {
            reject();
          }
        })
      }
      recursiveAPICall('/me/feed?fields=id,name,message,picture,place,with_tags&with=location');
    })
  },

  beforeModel(transition) {
    this._super(transition);
    return this.fetchAllGeotaggedPosts().then(response => {
      this.set('posts', response);
      // console.log(this.get('posts'))
    })
  },

  model: function() {
    //console.log(this.get('posts'))
    return this.get('posts'));
  }
})

我的组件(我想访问该属性的位置)如下所示:

// components/world.js
didRender() {
  console.log(this.get('posts'))
}

我的问题是组件内的帖子总是未定义的,这意味着它不会接收或无法访问该值。

我可以访问beforeModel和model hook中的post值,所以我确信promise会解决来自Facebook的帖子并且不会被拒绝。

我也尝试设置一个字符串值,导致未定义。

有人在我的代码中有解决方案或识别错误吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

您正在将帖子传递给组件,但未定义帖子,您想要的是这个。 {{map-widget posts=model}} 您可以访问返回帖子的模型功能,但您无法访问帖子,因为它们无法在任何地方定义。