gpt4 book ai didi

ember.js - 从 hasMany 关系中删除 child

转载 作者:行者123 更新时间:2023-12-04 08:45:25 26 4
gpt4 key购买 nike

如何在不删除 child 的情况下从 hasMany 关系中删除 child ?

我尝试将 child 的 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()再次。这将导致“setProperty in state rootState.loaded.updated.inFlight”错误,因为在 Ajax 请求为 时无法更改记录。机上 .

如果您的意图是实际删除 专线 ,从而将其从 中删除有很多 关联,那么我建议 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一旦标记为删除,绑定(bind)以使用 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; }

关于ember.js - 从 hasMany 关系中删除 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12738004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com