удалить ребенка из отношений 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()