我正在使用Ember 1.0-pre4.
我有两种模式,一对一的关系:
App.Lesson = DS.Model.extend timeslot: DS.belongsTo 'App.Timeslot' App.Timeslot = DS.Model.extend lesson: DS.belongsTo 'App.Lesson'
我有一个适配器配置为在保存时将时隙嵌入课程中:
App.Adapter = DS.RESTAdapter.extend() App.Adapter.map App.Lesson,timeslot: { embedded: 'always' } App.Store = DS.Store.extend revision: 11 adapter: App.Adapter.create()
然后我创建一个课程和一个时间段并尝试保存它们:
lesson = App.Lesson.createRecord group: group lesson.set('timeslot',App.Timeslot.createRecord()) lesson.store.commit()
但是在保存时没有嵌入任何东西,我看到POST请求,一个用于课程,一个用于时间段.
我如何告诉Ember始终将时间段嵌入课程中?
解决方法
我认为这是一个错误,你应该报告它.筛选源代码并进行一些测试表明,createRecord根本没有考虑嵌入式配置.此配置仅用于序列化和反序列化过程.
当您调用createRecord时,会将一条记录添加到存储桶中,并在提交时使用ember-data简单地在存储桶中的每条记录上触发一条ajax帖子.
因此,为了回到你的代码,使用ember-data,你创建了两个记录,并且在提交时它将触发一个ajax post调用,其中Lesson对象嵌入了Timeslot,并且在后续调用中也将触发另一个ajax post对于Timeslot来说,这是最后一个记录.
lesson = QrTimetable.Lesson.createRecord group: group lesson.set('timeslot',QrTimetable.Timeslot.createRecord()) lesson.store.commit()
除非有更好地理解余烬数据内容的人与我的观点相矛盾,否则我倾向于相信这是一个错误.
这是您提交事务时调用的最后一个代码.
createRecord: function(store,type,record) { var root = this.rootForType(type); var data = {}; data[root] = this.serialize(record,{ includeId: true }); this.ajax(this.buildURL(root),"POST",{ data: data,context: this,success: function(json) { Ember.run(this,function(){ this.didCreateRecord(store,record,json); }); },error: function(xhr) { this.didError(store,xhr); } }); },
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。