有没有人花一点时间来看看我在Knockout JS和绑定选择列表时遇到的一个令人费解的问题?
应该通过在选择列表中调用value: favColorId
而不是使用基于函数的value: favColorId()
调用来在列表中选择此人最喜欢的颜色,这里发生了一些非常奇怪的事情,我过去从未使用过(),它也会导致一些其他奇怪的问题,它不会回想起跨度中的值(因此更改所选项目什么都不做)..我尝试重新创建一个简单的样本,我可以展示最好的这个问题。
答案 0 :(得分:1)
我已经包含了我的
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)!
<强>更新强>
我想到了我的解决方案,但事情并不正确。唯一正确的是,你需要在中添加可观察颜色的内容之后应用绑定的部分。 This is your fiddle,该部分向下移动。
这适用于 ,但是当arrayPushAll
中已有数据时,您需要使用observableArray
方法。此方法合并,而在不使用它时覆盖它(example with data inside the observable)。