Спа, как получить доступ к прародителю?
Я пытаюсь заставить SPA работать со следующими базовыми моделями:
public class Owner
{
public int OwnerId { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<TodoItem> TodoItems { get; set; }
}
public class TodoItem
{
public int TodoItemId { get; set; }
[Required]
public string Title { get; set; }
public bool IsDone { get; set; }
public int OwnerId { get; private set; }
public virtual Owner Owner { get; set; }
public virtual ICollection<ActionItem> ActionItems { get; set; }
}
public class ActionItem
{
public int Id { get; set; }
public string Name { get; set; }
public int TodoItemId { get; private set; }
public virtual TodoItem TodoItem { get; private set; }
}
и, на мой взгляд, я попробовал это:
<div data-bind="foreach: ActionItem">
<div data-bind="attr:{id:Id}">
<span data-bind="text: Name"></span><br /> <!-- works -->
<span data-bind="text: TodoItem().Name"></span><br /> <!-- doesn't work -->
<span data-bind="text: TodoItem().Owner().Name"></span> <br /> <!-- doesn't work -->
</div>
</div>
Я также попытался добавить вычисляемое свойство в ActionItem, содержащее имя владельца:
public string OwnerName
{
get { return this.TodoItem.Owner.Name; }
}
и звонит:
<span data-bind="text: OwnerName"></span><br /> <!-- doesn't work -->
но если я добавлю другую статическую строку и установлю значение вручную:
public string SomethingElse { get; set; }
тогда это работает нормально:
<span data-bind="text: SomethingElse"></span><br /> <!-- works -->
Что я делаю неправильно?
ура
2 ответа
Как предлагает Obiwan007, вы решаете проблемы сериализации, устанавливая обратную ссылку на NULL. Вы также можете применить атрибут [IgnoreDataMember], если вы используете Code First.
Upshot делает видимыми только родительские объекты, а не их дочерние объекты. Таким образом, при использовании встроенной функции сопоставления привязка данных к дочерним объектам не будет работать.
Решение состоит в том, чтобы вручную создавать свои клиентские объекты в Javascript и сопоставлять их самостоятельно. Я отправил рабочее решение в ответ на другой вопрос: /questions/13175444/kak-zagruzit-svyazannyie-obektyi-cherez-mvc4-upshot/13175452#13175452
Попробуйте использовать переменную $parent:
<span data-bind="text: $parent.Name"></span> <br />
<span data-bind="text: TodoItem().$parent.Name"></span> <br />