如何保存 child 属性?

How to save child properties?

Breeze & Angular & MV*

我收到一张发票​​ object 并扩展它的必要属性:客户、详细信息等。

访问详细属性很容易,invoice.detail[n].属性。保存对现有属性 (1 - n) 的更改也很容易。在我的 UI 中,我只是循环遍历我的 object vm.invoice.details 以获取并显示所有现有详细信息,将它们绑定到输入,随意编辑,调用 saveChanges(),完成!

(记住,在这个UI中,我也需要完成以下内容....)

现在,我需要插入一个新的详细信息的空白输入。

但是,我需要在现有的发票详细信息数组中插入一个新的详细信息。

例如:发票 #5 有 3 个详细信息(详细信息[0]、详细信息[1]、详细信息[2])。我需要插入现有发票 detail[3],然后调用 saveChanges()

我尝试调用 manger.createEntity('invoice') 但它抱怨 FK 限制。我知道您可以在 createEntity('obj', newvalues) 中将值作为第二个参数传递...但这是正确且唯一的方法吗?

看起来这一切都应该容易得多,但是,我很茫然,所以请尽可能提供帮助。 TIA!

确保您拥有正确的 EntityName,因为有时创建实体并不像它那样简单 seems.Before 使用实体请参阅

http://www.getbreezenow.com/documentation/creating-entities

我建议您查看您的元数据文件,转到文件的最后一行,您可以看到名为 "entitySet"

的字段
"entitySet":{"name":"Entity_Name","entityType":"Self.Entity_Name"} 

检查我这里的实体名称 "Entity_Name" 然后尝试创建实体并使用这个名称

  manger.createEntity('Entity_Name');

看看DocCode sample,它有针对包括这个在内的各种场景的测试。

也许以下内容提供了您正在寻找的见解:

function addNewDetail() {
    var newDetail = manager.createEntity('Detail', {
        invoice: vm.currentInvoice,
        ... other initial values
     });

    // the newDetail will show up automatically if the view is bound to vm.details
}

请注意,我正在初始化父 invoice 导航 属性。或者,我可以在初始化程序中设置 Detail 实体的 FK 属性:

...
invoiceId: vm.currentInvoice.id,
...

无论哪种方式,Breeze 都会将新的详细信息添加到 currentInvoicedetails 集合中。

您的问题涉及 插入Detail。无需手动插入新的 Detail,并且您无法以任何方式管理 vm.currentInvoice.details 属性 的排序顺序。

Breeze 没有集合导航属性的排序顺序概念

如果您需要以特定顺序显示详细信息,您可以将排序过滤器添加到 angular 绑定到 vm.currentInvoice.details