【问题标题】:How do I customise the Ember store path for a specific model?如何为特定模型自定义 Ember 存储路径?
【发布时间】:2015-08-30 09:58:54
【问题描述】:

我在/movies/:movie_id/actors 有一个 API 端点。

我正在尝试使用 Ember Data 来获取此端点。在这一点上,我对建模电影不感兴趣,只是演员。我的路线如下所示:

this.route('actors', { path: '/movies/:movie_id/actors' });

我的演员模型很简单:

DS.Model.extend({
  name: DS.attr("name")
})

在我的演员路线中,我有:

model: function(params) {
  // params contains movie_id
  return this.store.findAll('actor')
}

这将导致 Ember 发送对 /actors 的请求。如何让 Ember 向 /movies/:movie_id/actors 发送请求?

我的 JSON 以 { "movies": [ { … } ] } 的格式返回,我使用的是 DS.ActiveModelAdapter,如果这完全相关的话。我使用的是 Ember 2.0。

【问题讨论】:

  • 看看buildURL钩子。
  • ember-data 是项目的硬性要求吗?
  • @ToranBillups 不,不是硬性要求。我一直在想使用它的价值。
  • 老实说,如果您不是绝对需要 ember-data,我会跳过复杂性。同时学习 ember 和富客户端开发就足够了(根据我的经验 - 有些人可能不同意)。如果您只需要 $.ajax + 一个简单的内存缓存,那么您会突然在基本数据流上拥有极大的灵活性。这是一个简单的 ember 示例,其中包含 $.ajax + 一个非常基本的内存缓存(本质上只是推送/查找对象)github.com/toranb/pods-with-components-example

标签: rest ember.js ember-data


【解决方案1】:

DS.Store 不适用于“路径”概念。它更像是一个数据桶,当被补充时,它可以承担与开发人员合作的负担(获取/更新/创建/缓存等)。在您的情况下,它看起来类似于:

您现在使用的 ActiveModelAdapter 使用特定约定进行访问,并且与您的数据提供程序不兼容。那么,您有哪些选择?

  1. 通过覆盖 pathForTypebuildURL 方法自定义 ActiveModelAdapter(注意 - 链接用于 RESTAdapter,因为 ActiveModelAdapter 是它的子类)
  2. 选择更兼容的适配器甚至write your own
  3. 不要使用适配器 - 通过 AJAX 获取数据并直接使用 push()/pushPayload() 将其提供给存储

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 2014-07-03
    相关资源
    最近更新 更多