服务器更新时使用Ember Data RestAdapter

使用Ember-Data和RestAdapter,我可以成功地从我的服务器获取数据。 我使用Handlebar的{{input}}助手显示这些数据。 用例相对简单:我想让用户更新数据,并将修改保留回服务器。

这是我的问题:

1)当我修改屏幕上显示的数据时,一旦我从特定字段中退出,Ember-Data“store”会自动在场景后更新?

2)在监视服务器传入消息时,当我退出某个字段或更改路由时,我看不到来自Ember的http“PUT”请求。 那么我该如何去触发服务器的更新呢?

后续评论

Per Amir的回答如下,我让RestAdapter通过使用“this.get('model')。save();”向服务器发送一个“PUT”请求。 但RestAdapter没有发送hasMany记录。 因此,如果我的模型定义如下所示(请注意'item'和'strat'都有ID,这些ID在模型定义中未显示):

App.Item = DS.Model.extend({
  itemName: DS.attr('string'),
  strategy: DS.belongsTo('strat')
});

App.Strat = DS.Model.extend({
    stratName: DS.attr('string'),
    items: DS.hasMany('item',{async:true})
});

“this.get('model')。save()”触发了一个“PUT”请求到服务器,但发送的JSON只包含了stratName。 如何让RestAdapter发送hasMany记录?


您可以通过调用save模型(可能来自控制器)来决定何时将对象save到服务器。

请注意,此时ember-data不是生产准备好的,但对于简单的情况,它应该没问题:-)

这是一个小提琴,显示保存一个新的纪录。 在铬检查器,你可以看到它做了一个GET和POST。 如果你有一个记录已经加载并保存,它会做一个PUT。

节省有很多

当RESTAdapter将对象序列化为JSON时,它会遍历所有属性。 如果这些属性是关系,它们可能还没有实现,并且可能不会被发送到后端。 (或者以undefined方式发送到后端);

当我需要保存关系时(特别是如果它是异步的),我一直在保存中保存数据以确保数据准备就绪。

strat.get('items').then(function(){
  strat.save(); //at this point items is populated
})

我确信有更好的方法来做到这一点,并很乐意学习它!


选项1

串行器,与DS.EmbeddedRecordsMixin:

attrs: {
    // if the kids are embedded to and from server:
    childAttribute: { embed: 'always' },
    // if sending the kids with data to the server:
    childAttTwo: { serialize: 'records', deserialize: false }
}

选项2

另一种方法是通过一个插件Ember-CLI Stained By Children,它是一个Mixin集合,它用Child Model数据解决了这个问题。 我也喜欢这个命名法:染色的孩子和干净的嵌入式孩子! 所以适合这种困境!

链接地址: http://www.djcxy.com/p/90953.html

上一篇: server updates when using Ember Data RestAdapter

下一篇: table integration with Ember