0

有人有时间来看看我在使用 Knockout JS 和绑定选择列表时遇到的一个令人费解的问题吗?

应该通过在选择列表中调用value: favColorId来选择列表中的人喜欢的颜色,而不是基于函数的调用value: favColorId(),这里发生了很奇怪的事情,我过去从未使用过(),这也导致了一些其他奇怪的问题,它不会将值召回到跨度中(因此更改所选项目无济于事)。我已经尝试重新创建一个简单的示例,尽我所能证明这个问题。

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

4

1 回答 1

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 没有())!

JSF中。

更新

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

这适用于您的情况,但是arrayPushAllobservableArray. 此方法会合并,而您在不使用它时会覆盖它(例如 observable 中的数据)。

于 2013-04-24T06:26:17.753 回答