【问题标题】:override ember-data's url conventions覆盖 ember-data 的 url 约定
【发布时间】:2016-01-14 00:06:10
【问题描述】:

在我的 ember 应用中,我有这个模型:

//models/photo.js
export default DS.Model.extend({
    image: DS.attr(),
    title: DS.attr('string'),
    caption: DS.attr('string'),
    published: DS.attr('boolean')
});

然后我必须从 REST api 获取数据;特别是照片模型应该以这种方式从 2 个端点进行感染:

  • route /aaa --> 应该从 /photos 端点获取,该端点返回所有照片的数组;

这很简单:

var photos = this.store.findAll('photo')

并且 ember-data 将自动调用 /photos 端点,因为这遵循其约定;

  • route /bbb --> 应该从 /feed 获取; /feed REST api 端点还返回一组照片(与上述相同的模型),但以某种方式过滤;

在任何情况下,它都会返回一组照片对象,例如 /photos 端点; 但在这种情况下是不可能的

var photos = this.store.findAll('photos')

就像在 /aaa 路由中一样,因为这样做会告诉 ember-data 从 /photos 端点获取;

如何从不同路由的不同端点获取相同的模型? (我使用 ember 2.2.0 和 ember-data 2.2.1)

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    除非您正在执行普通的 ol ajax 调用并推送有效负载以存储或修补适配器,否则您无法这样做。我不建议弄乱 ember 数据及其适配器,因为它肯定会回来咬你。您可以做的是传入一个参数并更改 API 控制器中的逻辑以对该参数进行 if/else 检查并发送您需要的相关数据。

    路线 1 - this.store.query('photo', { type: 'png' })

    路线 2 - this.store.query('photo', { type: 'jpeg' })

    【讨论】:

    • 您能否更具体地说明为什么将 Ajax 调用的有效负载推入商店会是个坏主意?
    • 这不是一个坏主意,但是当您使用框架时,最好遵守该特定框架的限制/约定。原因之一是您必须负责构建要推送到存储的数据,并且每次进出页面时都会发出请求,而不是从存储中获取。 Ember 指南将更好地指导您 - guides.emberjs.com/v1.10.0/wip/basic-ajax
    【解决方案2】:

    简短的回答是你不能,因为适配器是每个模型,而不是每个路由。

    然而,为了解决这个问题,您可以使用与store.push/store.pushPayload 配对的普通ajax 调用将数据加载到存储中。

    有关详细信息,请参阅store documentation

    【讨论】:

      猜你喜欢
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-03
      • 1970-01-01
      • 2022-12-14
      • 2010-11-14
      • 1970-01-01
      相关资源
      最近更新 更多