在Knockout订阅中设置Breeze Navigation属性

时间:2014-05-07 21:47:08

标签: javascript knockout.js breeze navigation-properties

我正在使用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();
}

1 个答案:

答案 0 :(得分:1)

我不明白你在努力实现的目标。

我对...非常有信心的一件事是datacontext.newBreezeEntity创造了一个悬挂在空气中并且不属于任何导航属性的物体。

让我们看一下您的datacontext.newBreezeEntity方法:

return manager.metadataStore.getEntityType(entityName).createEntity();

这确实会创建一个名为entityName的新实体。但这是一个原始实体&#39;。它不属于EntityManager ...当然不属于manager实例。它与任何特定的其他实体(例如,您神秘命名的Entity实体)无关。它只是一个独立的实体。

我打赌你以为它会属于manager,因为你在那里开始表达。嗯,它没有。在您要求manager时,metadataStorevm.newBreezeEntity失去了联系。

但是还有很多其他事情对我毫无意义。我无法告诉你为什么要订阅vm.newEntity,也不知道为什么它被称为&#34; newBreezeEntity&#34;也不是它与this之间的关系,也不是你认为{{1}}在订阅函数中的关系。

也许您应该退一步说明您希望此代码执行的操作。