[英]knockout.js binding different texts for <select> and <option>
[英]Strange knockout js select option binding issue
是否有人有时间看看我在使用Knockout JS和绑定选择列表时遇到的令人困惑的问题?
应该通过在列表中调用value: favColorId
在列表中选择该人喜欢的颜色,而不是通过基于函数的value: favColorId()
调用value: favColorId()
,这里发生了非常奇怪的事情,我从没使用过()过去,它还会引起其他一些奇怪的问题,使您无法将值重新记入跨度(因此,更改所选项目不会产生任何效果)。.我尝试重新创建一个简单的示例,以尽我所能证明该问题。
我已经包含了
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.