【问题标题】:How to correctly access Ember model data from controller如何从控制器正确访问 Ember 模型数据
【发布时间】:2016-07-07 20:48:06
【问题描述】:

我正在使用 Ember.RSVP.hash 访问 Ember 控制器中的多个模型:

export default Ember.Route.extend({
    model() {
        return Ember.RSVP.hash({
            categories: this.store.findAll('category')
            languages: this.store.findAll('language'),
            requirementTypes: this.store.findAll('requirement-type')
        });
    },

    setupController: function(controller, models) {
        controller.set('categories', models.categories);
        controller.set('languages', models.languages);
        controller.set('requirementTypes', models.requirementTypes);
    }
});

我一直在 Google 上搜索如何正确访问控制器中的模型数据。到目前为止,我发现的唯一方法感觉太老套了。我只想访问从我的 api 返回的原始 HTTP 响应数据。

但是,当我编写 this.get('categories') 时,我得到的结果相当丑陋,而且是一个比我的 api 返回的对象复杂得多的对象:

“InternalModel”条目包含从我的 api 返回的 _data 属性中的实际数据:

是否有更好的推荐方法来访问从我的 api 返回并通过关联路由传递给控制器​​的模型数据?我希望能够访问我的 api 返回的确切数据,例如 this.get('categories') 并立即访问我的 api 发送的模型数据。

【问题讨论】:

  • 为什么要访问精确的 api 响应?你不能只定义你的模型来拥有你需要的所有数据吗?您将无法使用 ember 存储方法访问确切的响应,您需要使用常规 ajax 请求才能做到这一点。
  • 我正在使用 Ember Data 发出 api 请求,然后将该模型数据传递给控制器​​。我这样做的方式真的是最好的方式吗?如果是这样,那么我不确定我是否理解 Ember Data 的意义,并且更愿意简单地使用手动 HTTP 请求。
  • 您可以使用controller.setProperties(models)一次性设置所有三个属性

标签: ember.js ember-data


【解决方案1】:

是的,这是正确的方法。 Ember 数据是 ember 的持久层,如果你不想使用它,你不必使用它。但它非常有用,关键是要有一种通过模型对象访问数据的好方法。

在您的情况下,如果您遍历模型结果中的一个集合,您将获得包含您的数据的 ember 记录。所以在控制器中你可以这样做:

this.get('categories').forEach(category => {
  // Do something with category data, i.e.
  console.log('Category name:', category.get('name'));
});

【讨论】:

    猜你喜欢
    • 2017-10-06
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多