淘汰赛 3.1:Select2 无法与 valueAllowUnset 一起正常工作

Posted

技术标签:

【中文标题】淘汰赛 3.1:Select2 无法与 valueAllowUnset 一起正常工作【英文标题】:Knockout 3.1: Select2 not working properly with valueAllowUnset 【发布时间】:2014-04-15 11:53:20 【问题描述】:

我注意到,当我将 valueAllowUnset: true 与 Select2 插件一起使用时,默认值在选择框中不可见。但是,当我单击选择时,会突出显示正确的值。

http://jsfiddle.net/LgXcb/

尝试从上述小提琴中删除“, select2: ”,看看它应该如何工作。

关于导致此问题的原因有什么想法吗?是否与我用于 Knockout 的 select2 自定义绑定函数有关?

【问题讨论】:

【参考方案1】:

似乎我总是在设置赏金后立即找到解决方案,即使我等了几个月才开始赏金。

问题在于我的自定义绑定的update 函数内的代码。 select的observable值发生变化后,我还需要手动更新select2,像这样:

update: function(element, valueAccessor, allBindingsAccessor) 
  var value = ko.utils.unwrapObservable(allBindingsAccessor().value || allBindingsAccessor().selectedOptions);
  if (value) $(element).select2('val', value);

工作代码:http://jsfiddle.net/LgXcb/5/

【讨论】:

比我快,我刚开始研究select2 插件是否会监听底层select 元素以进行更改。对于他们将来添加到它来说,这将是一个不错的功能。 所以select2 github 有一个 ko 集成的 sn-p 代码,去看看! 是的,我也尝试使用他们的 ko 代码,但没有成功。感谢您在这方面帮助我!【参考方案2】:

有趣的是,您的setTimeout 电话引起了问题。为什么?我还不确定,但如果你删除它并在函数末尾直接调用getSemesters(),它将选择所选的初始值。

fiddle

如果我找到确切的原因,我会继续查看并更新您。


更新

当您查看 github 的 select2 插件时,您会发现令人惊奇的内容。

【讨论】:

我正在使用setTimeout 在我的原始代码中模拟 ajax 调用,它提供了选择选项。 selectedSemester observable 是默认值,它在 ajax 响应之前加载。 valueAllowUnset: true 防止 observable 在我填充列表之前被覆盖。问题在于 select2,它无法更新其标签,即使打开时选择了正确的值。

以上是关于淘汰赛 3.1:Select2 无法与 valueAllowUnset 一起正常工作的主要内容,如果未能解决你的问题,请参考以下文章

将 select2 与淘汰赛绑定

.Net Select / Select2 淘汰 javascript - 如果初始值不在下拉列表中,则无法加载它们

带有 ajax 的淘汰赛3+select2 (v4)

Select2 用字符串覆盖淘汰赛 observableArray

带有淘汰赛的Select2如何在选择中显示选定的项目?

Select2 在淘汰赛中选择标签作为对象而不是“id”