Knockout.js 使用knockout-kendo.js和breeze.js时不显示DropDownList值

Knockout.js 使用knockout-kendo.js和breeze.js时不显示DropDownList值,knockout.js,kendo-ui,breeze,Knockout.js,Kendo Ui,Breeze,我正在使用Ryan Niemeyer的Knockout-Kendo.js库和breeze.js。我对DropDownList有问题。我对DropDownList的定义如下: <p data-bind= "text: breezeEntityKO().FruitId"> </p> <!--just for debug--> <input data-bind="kendoDropDownList: { data: selectionOptions, dat

我正在使用Ryan Niemeyer的Knockout-Kendo.js库和breeze.js。我对DropDownList有问题。我对DropDownList的定义如下:

<p data-bind= "text: breezeEntityKO().FruitId">  </p> <!--just for debug-->
<input data-bind="kendoDropDownList: { data: selectionOptions, dataValueField: 'FruitId', dataTextField: 'FruitDescription',  value: breezeEntityKO().FruitId}"></input>
当我更改FROUTID的值时,DropDownList保持空白。正确的值将显示在调试文本输出中,并且每次我更改breezeEntityKo()的值时都会更改

我能让DropDownList显示正确值的唯一方法是使用knockout'With'绑定。使用“with”绑定时,值的定义如下-value:$data.fructId

<div  data-bind="with: breezeEntityKO">
    <input data-bind="kendoDropDownList: { data: selectionOptions, dataValueField: 'FruitId', dataTextField: 'FruitDescription',  value: $data.FruitId}"></input>
</div>

这就行了。下拉列表显示正确的值。每次我更改breezeEntityKo().frutid时,DropDownList都会更新。当我使用下拉列表更改breezeEntity上的FruitId属性值时,会正确更改。一切都很好。 但是,当我在这个场景中使用knockout'With'绑定时,我会遇到一些性能问题,所以如果可能的话,我想找到一个替代方案

关于如何使用kendoDropDownList,其中“值”来自breeze实体上的属性,而不必将所有内容都包装在“With”中,有什么想法吗

文件在这里

根据文档中的示例,当“值”只是一个可观察的ko时,没有问题。当我试图将“value”定义为breezeEntityKO().fruthId或breezeEntityKO.fruthId时,我遇到了一些问题

编辑 下面的工作没有任何问题,但我需要它与breezeEntityKO.fructId而不是selectedfructId一起工作

<input data-bind="kendoDropDownList: { data: selectionOptions, dataValueField: 'FruitId', dataTextField: 'FruitDescription',  value: selectedFruitId}"></input>

以下是一个示例,您可以尝试这样做,以避免重新呈现选项:

this.selectedFruitId = ko.computed(function(){
    return this.breezeEntityKo().FruitId();
}, this);
然后使用编辑中的内容作为标记:

<input data-bind="kendoDropDownList: { data: selectionOptions, dataValueField: 'FruitId', dataTextField: 'FruitDescription',  value: selectedFruitId}"></input>

另外,请注意:您不需要在with绑定中使用
$data
,除非您实际需要整个对象:范围暗示为您在with绑定中使用的项目的上下文。所以在上面你可以说:
value:fructid

谢谢你的回复。我已经用一些额外的细节更新了我的问题。已正确拾取selectionOptions,只是在尝试breezeEntityKO().FruitId或breezeEntityKO.FruitId时未设置其“值”。我试图避免使用“With”的原因是,每次我在breezeEntityKo()中更改实体时,不会重新选择所有selectionOptions。我有一个表格,里面有大约50个下拉列表,有些有几百个可用选项。对于每个50个下拉列表,所选选项是静态的吗?如果是这样,我会说在父对象上定义它们,使用
可以使用
$parent
绑定引用它们。。i、 e.
数据:$parent。选择选项
。是的,每个下拉列表的选项都是静态的。即使我使用data:$parent.selectionOptions,它是否仍在data bind=“with:breezeEntityKO”的范围内?如果对breezeEntityKO进行了更改,是否会重新呈现所有内容,包括$parent.selectionOptions?我试图实现的是,当我更改breezeEntityKO中的实体时,它只会更改下拉列表的值,并且不会重新呈现所有selectionOptions。它可能会重新呈现,不经过测试就无法确定。我更新了我的答案以反映更新的信息。看看这是否有帮助=)
this.selectedFruitId = ko.computed(function(){
    return this.breezeEntityKo().FruitId();
}, this);
<input data-bind="kendoDropDownList: { data: selectionOptions, dataValueField: 'FruitId', dataTextField: 'FruitDescription',  value: selectedFruitId}"></input>
<input data-bind="kendoDropDownList: { data: breezeEntityKO().selectionOptions, dataValueField: 'FruitId', dataTextField: 'FruitDescription',  value: breezeEntityKO().FruitId}"/>