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

如何访问javascript文件中的组件属性?,javascript,ember.js,Javascript,Ember.js,我目前正在开发一个余烬应用程序 目前,我正在尝试访问一个属性,该属性是在components js文件内部的路由中设置的 总的来说,从路由内的Facebook Graph API获取数据(作为某种模型),然后访问组件内的数据在地图上绘制点 我的模板如下所示: // map.hbs {{map-widget posts=posts}} // routes/world.js import Ember from 'ember'; import AuthenticatedRouteMixin from

我目前正在开发一个余烬应用程序

目前,我正在尝试访问一个属性,该属性是在components 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'))
}
我的路线如下所示:

// 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'))
}
我的组件(我想在其中访问属性)如下所示:

// 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'))
}
我的问题是post在组件中总是未定义的,这意味着它不接收或无法访问该值

我能够访问beforeModel和model钩子中的post值,因此我确信该承诺与Facebook的帖子一致,不会被拒绝

我还试图设置一个字符串值,这也会导致一个未定义的字符串

是否有人有解决方案或认识到我的代码中的错误


提前感谢。

您正在向组件传递帖子,但是帖子没有定义,您想要的是这个。

{{map widget posts=model}

您可以访问返回POST的模型函数,但无法访问POST,因为它们没有在任何地方定义。

您将POST传递给组件,但POST没有定义,您需要的是这样。

{{map widget posts=model}
您可以访问返回帖子的模型函数,但无法访问帖子,因为它们没有在任何地方定义