【发布时间】:2012-06-03 01:19:17
【问题描述】:
我正在尝试让 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 -->
我做错了什么?
干杯
【问题讨论】:
-
你的控制器看起来怎么样?您是否在 TodoItem 查询中包含“所有者”?这也可能导致循环引用...... paret-chidl-parent 引用并没有像现在看起来那样真正涵盖。这将导致序列化的无限循环。出于这个原因,我创建了一个 DTO,孩子仅通过他的字符串名称、id 引用父对象,而不是对父对象的完整引用。
-
嘿 - 抱歉回复晚了。我不得不离开机器一会儿 :) 循环引用错误正是我得到的,经过大量研究,似乎用 json.net 替换序列化程序的替代修复会导致其他问题。所以看起来我现在必须坚持使用 mvc3 并稍后更新。使用字符串键是个好主意 - 我今晚会试试。
标签: knockout.js upshot