Breeze不会用其真实数据替换Ref:节点
Breeze does not replace the Ref: node with its real data
如何强制微风加载真实的Node数据,而不是像Object {$ref: "5"}
这样的数据?除了我在客户端代码中创建的一个扩展属性外,这种情况一直都在发生。
原始JSON包含以下部分:
CurrentUserAssignments: [
{
$ref: "5"
}
],
其从未被引用到也包括在原始JSON结果中的节点5。
这是我的EF实体的一部分:
public class Task
{
public Guid Id {get; set;}
private ICollection<Assignment> _assignments;
public virtual ICollection<Assignment> Assignments
{
get { return _assignments ?? (_assignments = new Collection<Assignment>()); }
set{_assignments = value;}
}
[NotMapped]
public Assignment CurrentUserAssignments
{
get
{
var userId = Guid.Parse(HttpContext.Current.User.Identity.Name.Split('$'[1]);
return Assignments.OrderByDescending(a=>a.AssignmentDate).Take(1).SingleOrDefault(p => p.AssigneeId == userId && p.IsRevoked == false && p.Invisible == false);
}
}
....
}
在客户端中,我在任务构造函数中注册了CurrentUserAssignments类似于:
store.registerEntityTypeCtor(models.entityNames.task, function () { this.NoteCount = 0; this.IsDone = false; this.CurrentUserAssignments = ko.observable() });
但是CurrentUserAssignments永远不会被真实数据填满,而只有ref:'5'
为什么用[NotMapped]属性标记"CurrentUserAssignments"?
对于真实数据,您应该在客户端使用.extend
或在服务器端使用.Include
。当服务器返回$ref时,这意味着对象以前已经发送过,并且它已经被赋予了唯一的标识符。
服务器不需要一次又一次地发送同一个对象,而是知道有一个具有唯一标识符的对象,然后可以只发送$ref而不是实际对象。Breeze能够对此进行解析,并可以用以前发送过的真实对象替换$ref。
你唯一需要做的就是让breeze在客户端或服务器端使用.expand或.include将该对象包含到"主"对象中。
您可以在这里阅读有关$ref的一些详细信息:http://breeze.github.io/doc-cs/webservice-data-mapping.html
只需搜索$ref,下面有描述。
相关文章:
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 我如何找到一个句子中的所有空格并替换忽略它们
- 如何用更合适的内容替换document.write
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 用空格替换下划线PHP
- str.split(someString).join(someOtherString)是否等效于替换
- 使用javascript的图像替换循环
- window.location替换并传递URL历史记录条目中的变量
- 替换标记中的属性
- 指令的模板必须只有一个根元素:With restrict E&替换true
- AngularJs对ng消息的自定义替换
- 用超链接替换URLS
- 用cdata标记替换脚本标记
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 在javascript中,I'我很难弄清楚如何让regex只替换捕获而不替换匹配
- 替换url中变量的值
- 我希望在不替换现有变量的情况下恢复localStorage中的变量
- Wordpress:替换源(域名)链接
- Breeze不会用其真实数据替换Ref:节点