удалить ребенка из отношений hasMany
Как удалить ребенка из отношений 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
2 ответов
на , это commit()
' s, а затем называет remove()
снова. Это вызовет " setProperty в состоянии rootState.нагруженный.усовершенствованный.ошибка "полет", потому что запись не может быть изменена, пока запрос Ajax бортовой.
если ваше намерение состоит в том, чтобы удалить строка, тем самым удаляя его из помощью методов hasmany ассоциация, тогда я предлагаю как:
remove: function(event) {
var item = event.context;
if (item.get('isDeleted')) return;
item.deleteRecord();
App.store.commit();
return item;
}
обратите внимание, что после что-то было отмечено для удаления deleteRecord()
, он останется жить в Эмбер с isDeleted
= = true до commit()
успешно завершается. Вы можете добавить classNames
привязка, чтобы скрыть его с помощью CSS, как только он помечен для удаления:
#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()