繁体   English   中英

奇怪的淘汰赛JS选择选项绑定问题

[英]Strange knockout js select option binding issue

是否有人有时间看看我在使用Knockout JS和绑定选择列表时遇到的令人困惑的问题?

应该通过在列表中调用value: favColorId在列表中选择该人喜欢的颜色,而不是通过基于函数的value: favColorId()调用value: favColorId() ,这里发生了非常奇怪的事情,我从没使用过()过去,它还会引起其他一些奇怪的问题,使您无法将值重新记入跨度(因此,更改所选项目不会产生任何效果)。.我尝试重新创建一个简单的示例,以尽我所能证明该问题。

http://jsfiddle.net/goneale/ph8Jw/

我已经包含了mapDictToArray()函数,但是它只是将javascript对象转换为键值JS数组。 我认为这不会导致问题。

实际上,这是问题的一部分。 该函数返回一个JavaScript数组,而不是一个可观察的数组,因此Knockout无法正确使用它。 我对您的代码进行了以下更改:

// The "mapDictToArray" makes a normal JS array, not a ko.observableArray();
// You can't simply "merge" a JS array with an observableArray(); you'll need
// some extra functionality for that: ko.utils.arrayPushAll()
// viewModel.colors(mapDictToArray(dict));
ko.utils.arrayPushAll(viewModel.colors(), mapDictToArray(dict));

// Apply the bindings *after* you've added the contents to the "colors" observable, in order to
// get the correct selected value
ko.applyBindings(viewModel);

那应该可以解决问题(使用没有()的正确HTML)!

JSFiddle

更新

我考虑过我的解决方案,但是有些不正确。 唯一正确的是添加可观察颜色的内容 ,需要应用绑定的部分。 这是您的小提琴 ,该部分向下移动。

这适用于你的情况 ,但你需要使用arrayPushAll方法时,已经有内部数据observableArray 当您不使用它时将其覆盖( 例如,observable中包含数据 ),则此方法会合并。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM