Ember.js 使用Ember Data RestaAdapter时服务器更新

Ember.js 使用Ember Data RestaAdapter时服务器更新,ember.js,ember-data,Ember.js,Ember Data,使用带有RestaAdapter的Ember数据,我能够成功地从我的服务器获取数据。我使用Handlebar的{input}}助手显示这些数据。该用例相对简单:我希望允许用户更新数据,并将修改保留回服务器 以下是我的问题: 1) 当我修改屏幕上显示的数据时,余烬数据“存储”是否会在我从特定字段中取出后自动更新 2) 在监视服务器传入的消息时,当我从字段中签出标签或更改路由时,我看不到来自Ember的http“PUT”请求。那么,如何触发服务器的更新呢 后续意见 根据下面阿米尔的回答,我让Rest

使用带有RestaAdapter的Ember数据,我能够成功地从我的服务器获取数据。我使用Handlebar的{input}}助手显示这些数据。该用例相对简单:我希望允许用户更新数据,并将修改保留回服务器

以下是我的问题:

1) 当我修改屏幕上显示的数据时,余烬数据“存储”是否会在我从特定字段中取出后自动更新

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

后续意见 根据下面阿米尔的回答,我让RestAdapter使用“this.get('model').save();”向服务器发送一个“PUT”请求。但是RestAdapter没有发送hasnown记录。因此,如果我的模型定义如下所示(请注意,“item”和“strat”都有ID,但在模型定义中没有显示):


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

您可以通过调用模型上的
save
来决定何时将对象持久化(到服务器)

请注意,此时余烬数据还没有准备好生产,但对于您的简单情况,它应该是好的:-)

下面是显示保存新记录的示例。在chrome inspector中,您可以看到它正在执行GET和POST。如果您已经加载了一条记录并点击save,它将执行PUT

储蓄有很多 当RESTAdapter将对象序列化为JSON时,它将遍历所有属性。如果属性是关系,则它们可能尚未实现,并且可能不会发送到后端。(或作为
未定义的
发送到后端)

当我需要保存一个关系时(特别是在异步的情况下),我一直在用get包装保存,以确保数据准备就绪

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
另一种方法是通过一个插件,该插件是一个mixin集合,通过子模型数据解决这个问题。我也很喜欢这个命名法:沾满儿童和干净的儿童!如此适合这种困境

阿米尔,我创建了一个带有{{action}}助手的按钮来调用控制器上的函数。函数的作用是:this.model.save();我已经验证了这个函数正在被调用,但是Ember仍然没有向我的服务器发送“PUT”请求。让模型调用save方法的正确方法是什么?好的,我让RestAdapter使用这个.get('model').save()发送一个“PUT”请求。但它不会发送太多的记录。因此,如果我的模型定义如下所示:App.Item=DS.model.extend({itemName:DS.attr('string'),stratLegs:DS.hasMany('stratlege'),{async:true});App.Strat=DS.Model.extend({stratName:DS.attr('string'),items:DS.hasMany('item',{async:true})});我编辑了我的答案(“保存hasMany”),这可能就是你正在做的事情。如果第一个问题得到了回答(让它付诸实施),我建议解决这个问题并开始一个新的问题。事实证明,我还有一个悬而未决的问题,也许你可以在那里插话/投票:
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 }
}