ジャンクション テーブルと多対多の関係があります。
public class Contact
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ContactContactGroup> ContactContactGroups { get; set; }
}
public class ContactContactGroup
{
public int Id { get; set; }
public int ContactId { get; set; }
public int ContactGroupId { get; set; }
public virtual Contact Contact { get; set; }
public virtual ContactGroup ContactGroup { get; set; }
}
public class ContactGroup
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ContactContactGroup> ContactContactGroups { get; set; }
}
リレーションを削除すると、次の例外が発生します。
Uncaught TypeError: Unable to parse bindings.
Bindings value: text: Contact().Name
Message: Cannot read property 'Name' of null
これは私の削除機能です:
that.deleteMe = function (contactContactGroup) {
// Doesn't work also, duplicates entries after second deletion
//contactGroup.ContactContactGroups.remove(contactContactGroup);
contactContactGroup.entityAspect.setDeleted();
};
ここにビューがあります:
<div data-bind="foreach: ContactContactGroups">
<div data-bind="text: Contact().Name"></div>
<button data-bind="click: deleteMe">Delete</button>
</div>
ノックアウトjsからの「with」バインディングによる回避策を見つけました:
that.deleteMe = function (contactContactGroup) {
contactGroup.ContactContactGroups.remove(contactContactGroup);
contactContactGroup.entityAspect.setDeleted();
};
<div data-bind="foreach: ContactContactGroups">
<div data-bind="with: Contact">
<div data-bind="text: Name"></div>
</div>
<button data-bind="click: deleteMe">Delete</button>
</div>
しかし、これは私には少し奇妙に思えます。これはbreezejsのバグですか、それとも何か見逃しましたか?