我有一个带有“行”和“列”模型的商店(html中的tr和td),按钮将行和列添加到行中。 我只想在按下“保存”按钮时将更改保存到服务器。
此时已经完成了这段代码,它几乎可以工作,但是我的“保存”方法有些问题: 行和列的“id”在保存时来自服务器,但是当保存一行时,它不知道所有列的id和visversa。因此,save方法有问题且代码根本不好。
我想和Ember一起,当然有更好的方法吗?,谢谢你,如果你能给我一些帮助。 也许在我的addRow和addColumn方法中可以做得更好吗?
Ember 1.11 with restAdapter
App.IndexRoute = Ember.Route.extend({
model: function () {
return this.store.find('row');
},
setupController: function(controller, model) {
controller.set('model', model);
}
});
App.Row = DS.Model.extend({
titre: DS.attr('string'),
columns: DS.hasMany('column', {async: true, embedded: 'always'}),
});
App.Column = DS.Model.extend({
titre: DS.attr('string'),
row: DS.belongsTo('row', {async: true}),
});
App.RowSerializer = DS.RESTSerializer.extend({
serializeHasMany: function(record, json, relationship) {
var hasManyRecords, key;
key = relationship.key;
hasManyRecords = Ember.get(record, key);
if (hasManyRecords && relationship.options.embedded === "always") {
json[key] = [];
hasManyRecords.forEach(function(item, index) {
json[key].push(item.get('id'));
});
}else{
this._super(record, json, relationship);
}
}
});
App.IndexController = Ember.Controller.extend({
selectedColumn: null,
actions: {
save: function(){
var row = this.store.all('row');
row.forEach(function(r, index, self){
r.save().then(function(r2){
r2.get('columns').forEach(function(c){
c.set('row',r2);
c.save().then(function(){
r.save();
})
})
})
})
},
clickCol: function(column){
this.set('selectedColumn', column)
},
addRow: function(){
_this = this;
var newRow = _this.store.createRecord('row',{titre:'Titre row'});
var newColumn = _this.store.createRecord('column', {
titre: 'Titre colonne',
})
newRow.get('columns').addObject(newColumn);
},
addColumn: function(){
_this = this;
this.get('selectedColumn').get('row').then(function(r){
var newColumn = _this.store.createRecord('column', {
titre: 'Titre colonne',
row: r
})
})
}
}
})
编辑
我确实发现了这个: DS.RESTAdapter: Robust Support for Parent->Child Hierarchies 其中有其他写入:“允许父和子记录保存在同一个提交中”,“[RESTAdapter]允许新父,子一次保存”... 女巫似乎是我正在寻找的东西,但在任何地方找不到如何让它发挥作用?
也是这样的: Client-Side IDs with Ember Data 女巫说“考虑用户创建带有多个附件的帖子的情况。在尝试保存子模型以保持这种关系之前,您需要确保保存帖子并解析其ID”......