Javascript KnockoutJS访问通过activator forItems创建的活动项

Javascript KnockoutJS访问通过activator forItems创建的活动项,javascript,knockout.js,durandal,Javascript,Knockout.js,Durandal,根据主详细信息示例,例如,但具有viewmodels的factory图案: this.activateProduct=activator.create().forItems(this.products) 点击激活` 调试输出模型及其数据 但是没有返回任何内容,尝试展开,调用valueAssessor函数等,并且找不到ko.toJSON以某种方式找到的可观察对象 在存储“当前项”时,是否必须使用activateItem将所有这些分解为单独的步骤 是否有任何语法可以检索内部的可观察对象?找到了

根据主详细信息示例,例如,但具有viewmodels的factory图案:

this.activateProduct=activator.create().forItems(this.products)


点击激活`
调试
输出模型及其数据

但是
没有返回任何内容,尝试展开,调用valueAssessor函数等,并且找不到
ko.toJSON
以某种方式找到的可观察对象

在存储“当前项”时,是否必须使用
activateItem
将所有这些分解为单独的步骤

是否有任何语法可以检索内部的可观察对象?

找到了

ko.unwrap(activateProduct.name()

问题是
ko.unwrap(activateProduct)=null
,直到单击激活它。因此,将其简单地设置为该值将导致绑定错误

Unable to process binding "text: function (){return ko.unwrap(activateProduct).name() }"
Message: ko.unwrap(...) is null;
因此,在尝试绑定激活器的可观察对象之前,必须首先检查激活器的空值

<div data-bind="text: (ko.unwrap(activateProduct) !== null) ? ko.unwrap(activateProduct).name():''"></div>


只是澄清一下:如果您使用
text:activateProduct().name
它会将您锁定在产品的静态版本中,并且在您更改
activateProduct
可观察值时不会更改,对吗?它似乎不是。。。第一次通过绑定时,没有为变量分配激活器,因此在该阶段会出现错误“nota function”。然后,当绑定出现时,它不知道用新数据刷新显示(因为绑定失败)。不过,您可能可以跳过
ko.unwrap
,只需检查函数是否存在。。。如果我在构造函数的早期为它赋值并绑定它,而不是等待激活器定义
activateProduct
(或者绑定一个代理函数,然后里面可能有激活器)。那么带
绑定的
呢?这可能也行得通。。。虽然activeProduct本身在开始时是空的,所以我不确定它在更新时是否会显示。
with
binding会在从空变为对象时更新。
<div data-bind="text: (ko.unwrap(activateProduct) !== null) ? ko.unwrap(activateProduct).name():''"></div>