0

使用 Ember-Data 和 RESTAdapter 的最新版本,有没有办法做到以下几点?

我有一个名为的资源App和一个 API,它/apps通过返回正确的 JSON(使用{ apps: [...] }等)来响应

由于这是从我们服务器上的静态 json 提供的,因此为每个可以获取为/apps/:app_id. 相反,最好总是加载 RESTAdapter 即使/apps它只使用获取的应用程序中的一个应用程序。

我必须编写自己的适配器来实现这一点吗?如果是,那么“挂钩”的好点是什么?

4

2 回答 2

1

假设您有一个应用程序模型App.App,它应该足以App.App.find()在您的应用程序加载时调用。这将使 AJAX 调用/apps. 即使您没有将结果缓存在变量中,您的数据存储也将填充返回的记录。现在,每当您调用时App.App.find(id),Ember Data 都会检查您的商店并返回记录(如果有)。如果它没有记录,那么它将尝试调用/apps/:id,但如果您的应用程序设计为仅使用静态集合,则不应发生这种情况。

您可以在几个不同的地方App.App.find()拨打电话。我可能会把它放在App.ready

App = Ember.Application.create({
  ready: function() {
    // pre-load apps
    App.App.find();
  }
});

App.App = DS.Model.extend({
  //...
});
于 2013-03-27T17:35:58.467 回答
0

这似乎有点 hacky(并且可能是),但看起来可以通过覆盖DS.Adapter:find().

就我而言,为了阻止对我的调用,/app/:app_id我写了这个:

find: function(store, type, id) {
    // Terminate calls for single app
    if (type === App.App) {
        // instead, load all apps and drop this request
        App.App.find();
        return;
    }
    // or continue as usual
    this._super(store, type, id);
 }

这也适用于嵌入的层次结构:“总是”记录并且 Ember 认为它必须加载中间级别。只要确保在删除这样的请求时确定加载父级!

于 2013-04-02T15:44:48.427 回答