如何使Ember本地存储适配器(LSAdapter)与Ember REST适配器一起使用?

时间:2013-06-13 02:13:17

标签: ember.js local-storage

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

具体来说,我想:

  1. 使用来自服务器的数据填充LSAdapter。
  2. 用户所做的所有更改都会更新到LSAdapter。 (我知道如何做这一步)
     (为准备#3,我可以有一个模型,在所有更新的LSAdapter中保存日志)
  3. 在n分钟内,LSAdapter更新数据将被发送回服务器。
  4. 我的后端服务器不是Rails,所以请将答案设为通用。

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


    如果无法同时使用LSADapter和RESTAdapter,我该怎么做才能完成第1步和第3步?

    我唯一可以想到的是将Ember应用商店设置为RESTAdapter,然后直接在我的应用中调用Web Storage localstorage,而不是直接从LSAdapter调用它。如果有更简单或内置的方式,请告诉我。

2 个答案:

答案 0 :(得分:2)

在阅读Ember数据的DS.Store评论后,似乎可以使用2 adapters at once

  1. 您可以通过多种方式从商店中检索模型。检索记录 对于特定ID,请使用DS.Model的{​​{1}}方法:

    find()

  2. 如果您的应用程序有多个var person = App.Person.find(123);个实例(不常见的情况),您可以 指定应该使用哪个商店:

    DS.Store

  3. 如果我试一试,我会更新这个答案。


    更新1:

    查看UPDATED for Additional question中的代码,其中 FixtureAdapter RestAdapter 都会被调用。

答案 1 :(得分: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);