RESTAdapter与Localstorage。我为什么要切换到RESTAdapter?

时间:2015-05-20 13:46:03

标签: ember.js ember-data

我和Ember已经合作了好几个月了。我们的项目必须离线运行,因此我们使用App Cache和Ember Localstorage Adapter。我对这种方法非常满意。我们从服务器一次加载所有数据,然后在整个项目的路径中使用它。

目前,我们必须为项目构建管理面板。不需要脱机工作。我想我可能会尝试使用Ember的RESTAdapter,因为它似乎是最常用的数据处理方式。

在第一印象中,在我看来它使事情变得更复杂。

例如(为了示例,我会过分简化),我有2个实体:

App.User = DS.Model.extend({
    firstName: DS.attr('string'),
    lastName: DS.attr('string'),
    phoneNumber: DS.attr('string'),
    studies: DS.hasMany('study')
});

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

和腐烂

App.UsersRoute = Ember.Route.extend({
    model: function(){
        return this.store.find('user');
    }
});

App.UserRoute = Ember.Route.extend({
    setupController: function (controller, model) {
        var userId = model.get('id');
        this._super.apply(this, arguments);
        this.store.find('user', userId).then(function (user) {
            controller.set('user', user);
        });
    }
});

/users路线上,我只显示用户的基本信息。 在/user路线上,我会显示他的信息以及他被分配到的研究。

这表示如果用户使用/users/user移至transitionTo路线,则user模板将从中获取user模型内存数据存储。尽管如此,还没有加载studies,也无法显示它们。最后,我们必须使用studiesusers模型加载一次。

如果直接从浏览器的URL访问/user路由或发生页面刷新,则服务器必须再次为user模型提供studies侧载。

所以在服务器端,我们必须实现两个必须返回这样的控制器方法。

/users路线:

`{
   "users":[{/*user1*/},{/*user2*/}], 
   "studies":[{/*study1*/}, {/*study2*/}, {/*study3*/}]
}`  

/user路线 -

{
   "user":{/*userdata*/}, 
   "studies":[/*and array of studies*/]
}

考虑到我们不使用大数据集。假设最多20个用户和最多20个研究,为什么我不应该一次加载它们并使用localstorage适配器存储它们(为了保证数据不被页面刷新)并使用RESTAdapter?

在我看来,使用RESTAdapter ,我们必须在服务器端编写更多代码,最重要的是用户体验会受到影响。大多数情况下,当请求进入服务器并返回时,将会有几秒的延迟

请分享您的意见。如果没有大型数据集,为什么要使用RESTAdapter?为了被迫使用RESTAdapter,数据集应该有多大?本地存储还有其他优势吗?

1 个答案:

答案 0 :(得分:3)

您可以随时push everything进入商店(使用pushpushManypushPayload),在这种情况下,您的金额不会很高数据,所以它不是什么大问题,但你仍然必须至少从服务器获取一个,这是你的真相来源。

但由于这是管理面板,我猜你不仅要显示数据,还要更新并可能删除,所以你必须仍然实现在服务器端处理它的方法,而REST是标准方法要做到这一点,但是ember不会强迫你使用它,如果你想要你可以做$.post(不推荐)。

您也不需要侧载所有内容,您可以定义您的关系async

studies: DS.hasMany('study', {async:true} )

然后,对于与该用户相关的每项研究,ember首先会点击/user然后/studies/{id}

有关详细信息,请参阅the guide