8

我想同时利用 Ember 本地存储适配器 (LSAdapter) 和 Ember REST 适配器 (RESTAdapter),以便为所有用户提供一个集中式数据库,同时避免为每个用户操作发送 Ajax 请求。

具体来说,我想:

  1. 使用来自服务器的数据填充 LSAdapter。
  2. 用户所做的所有更改都会更新到 LSAdapter。(我知道怎么做这一步)
    (为#3做准备,我可以有一个模型,在 LSAdapter 中保存所有更新的日志)
  3. 在 n 分钟内,将 LSAdapter 更新数据发送回服务器。

我的后端服务器不是 Rails,所以请让答案通用。

是否可以在 Ember 应用程序中同时使用 LSAdapter 和 RESTAdapter?如果是这样,请提供如何设置它的代码示例。
如果您提供步骤 1 和 3 的代码示例,我也将不胜感激,基本上,数据库如何与本地存储通信,反之亦然。


如果不能同时拥有 LSADapter 和 RESTAdapter,我该怎么做才能完成第 1 步和第 3 步?

我能想到的唯一解决方法是将 Ember 应用商店设置为 RESTAdapter,然后直接在我的应用中调用Web Storage localstorage,而不是从 LSAdapter 调用它。让我知道是否有更简单或内置的方法。

4

2 回答 2

2

在阅读了 Ember 数据的 DS.Store 评论后,看起来可以一次使用 2 个适配器

  1. 您可以通过多种方式从商店中检索模型。要检索特定 id 的记录,请使用DS.Model'sfind()方法:

    var person = App.Person.find(123);

  2. 如果您的应用程序有多个DS.Store实例(不常见的情况),您可以指定应该使用哪个存储:

    var person = store.find(App.Person, 123);

如果我尝试并让它工作,我会更新这个答案。


更新1:

查看 UPDATED 中的代码以获取同时调用 FixtureAdapterRestAdapter的附加问题

于 2013-07-03T03:05:39.457 回答
0
//define your main adapter as usual

App.Store = DS.Store.extend({
  revision: 13,
  adapter: DS.RESTAdapter.create({
      url: app.apiUrl,
      namespace: app.apiNamespace
  })
});


//App.Product for example will use the rest adapter
App.Product = DS.Model.extend({
    name: DS.attr('string'),
});


App.Somemodel = DS.Model.extend({
    name: DS.attr('string'),
});

//App.Somemodel for example will use the fixture adapter
App.Store.registerAdapter('App.Somemodel', DS.FixtureAdapter);
于 2013-09-03T05:21:28.313 回答