淘汰赛 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 一起正常工作的主要内容,如果未能解决你的问题,请参考以下文章
.Net Select / Select2 淘汰 javascript - 如果初始值不在下拉列表中,则无法加载它们