我正在使用Breezejs和Knockoutjs构建SPA(单页应用程序)。
当尝试在淘汰赛订阅中设置导航属性时,我遇到了一个问题。在ko.subscription
的最后一行console.log
函数显示实体,但WebPresences
导航属性为空。
不确定ko.subscription
中的事实是否真的重要但我能够在保存之前调用的js函数中设置导航道具,所以我认为它有一些意义。
所以这是我的Entity
模型
public partial class Entity
{
public int Id { get; set; }
public string Name { get; set; }
public Nullable<int> WebId { get; set; }
public virtual WebPresence WebPresence { get; set; }
}
这是我的ko.subscription
和相关变量:
var vm = {
newEntity: ko.observable(datacontext.createBreezeEntity('Entity')),
newWebPresence: ko.observable(datacontext.newBreezeEntity('WebPresence')),
}
vm.newEntity().WebPresence.subscribe(
function (data) {
var self = this;
if (data === null)
self.target(vm.newWebPresence());
console.log(vm.newEntity());
}
);
最后但并非最不重要的是datacontext
createBreezeEntity: function (entityName) {
return manager.createEntity(entityName);
},
newBreezeEntity: function (entityName) {
return manager.metadataStore.getEntityType(entityName).createEntity();
}
答案 0 :(得分:1)
我不明白你在努力实现的目标。
我对...非常有信心的一件事是datacontext.newBreezeEntity
创造了一个悬挂在空气中并且不属于任何导航属性的物体。
让我们看一下您的datacontext.newBreezeEntity
方法:
return manager.metadataStore.getEntityType(entityName).createEntity();
这确实会创建一个名为entityName
的新实体。但这是一个原始实体&#39;。它不属于EntityManager
...当然不属于manager
实例。它与任何特定的其他实体(例如,您神秘命名的Entity
实体)无关。它只是一个独立的实体。
我打赌你以为它会属于manager
,因为你在那里开始表达。嗯,它没有。在您要求manager
时,metadataStore
与vm.newBreezeEntity
失去了联系。
但是还有很多其他事情对我毫无意义。我无法告诉你为什么要订阅vm.newEntity
,也不知道为什么它被称为&#34; newBreezeEntity&#34;也不是它与this
之间的关系,也不是你认为{{1}}在订阅函数中的关系。
也许您应该退一步说明您希望此代码执行的操作。