从有很多关系中删除孩子
如何在不删除孩子的情况下从hasMany关系中删除孩子?
我曾尝试将孩子的foreign_key设置为null。 我也尝试在父关系上使用removeObject。
这里是一个例子。
App.Invoice = DS.Model.extend
lines: DS.hasMany('App.Line')
App.Line = DS.Model.extend
invoice: DS.belongsTo('App.Invoice')
App.InvoiceController = Ember.Controller.extend
removeLine: (line) ->
@get('content.lines').removeObject(line)
line.set('invoice', null)
@get('store').commit()
App.InvoiceEditView = Ember.View.extend
templateName: 'invoice'
App.LineView = Ember.View.extend
tagName: 'tr'
templateName: 'line'
#invoice template
<table>
{{#each content.tasks}}
{{view App.LineView}}
{{/each}}
</table>
#line template
<td><a {{action "removeLine" view.context}}>remove</a></td>
<td>{{description}}</td>
<td>{{price}}</td>
<td>{{price}}</td>
我目前正在使用
jquery 1.8.2
ember.js v1.0.pre-4
ember-data v11
在remove()
函数中,它commit()
,然后再次调用remove()
。 这将导致错误“状态rootState.loaded.updated.inFlight的setProperty”,因为该记录不能被改变,而Ajax请求的飞行 。
如果你的意图是实际删除该行 ,从而将其从hasMany关联中remove()
,那么我建议使用remove()
函数,如:
remove: function(event) {
var item = event.context;
if (item.get('isDeleted')) return;
item.deleteRecord();
App.store.commit();
return item;
}
请注意,一旦deleteRecord()
标记为要删除某个对象,它将保持在Ember中,并且isDeleted
== true,直到commit()
成功完成。 一旦标记为删除,您可能需要添加一个classNames
绑定以将其隐藏起来:
#line template
<tr {{bindAttr class="isDeleted"}}>
<td><a {{action "removeLine" target="view"}}>remove</a></td>
<td>{{description}}</td>
<td>{{price}}</td>
<td>{{price}}</td>
</tr>
像CSS一样:
.is-deleted { display: none; }
似乎将发票设置为空字符串的作品。
App.InvoiceController = Ember.Controller.extend
removeLine: (line) ->
@get('content.lines').removeObject(line)
line.set('invoice', '')
@get('store').commit()
链接地址: http://www.djcxy.com/p/11235.html