KnockoutJS selectedOptions 绑定导致选择框在 IE8 中抖动

Posted

技术标签:

【中文标题】KnockoutJS selectedOptions 绑定导致选择框在 IE8 中抖动【英文标题】:KnockoutJS selectedOptions binding causes select box to jitter in IE8 【发布时间】:2011-05-12 00:42:44 【问题描述】:

这仅在 IE8 中, 当我有多个值选择框绑定到时发生 带有 selectedOptions 的 observableArray 并且项目数超过 选择可以显示(启用滚动)。 因此,每当我 Ctrl+单击选择框中的项目时,滚动 位置“跳开”,我最终被向下滚动了一点。这 产生紧张不安的不愉快体验。 据我了解,这个问题是因为双向绑定 selectedOptions:当我点击一个项目时,它会被添加到数组中, 这反过来会导致在 observableArray 之后重新填充选择框 通知 UI 其更改。 有什么可以做的吗?

更新:

我最终使用了这个绑定:

<select data-bind='visible:operator() ? operator().Element == "DropDown" : false, 
                                options: property() ? property().ReferenceItems : null, 
                                optionsText: "Name", 
                                optionsValue: "Id", 
                                optionsCaption: "Выберите...", 
                                selectedOptions: selectedValues,
                                multiple: selectedValues().length > 1'>
</select>

【问题讨论】:

你找到答案了吗?我有同样的问题 @Mel,我最终删除了双向绑定,并且只使用了单向绑定(从 ui 到 viewmodel)。这解决了我的问题。 对不起,我对此很陌生。但你到底是怎么做到的?我尝试使用纯 js 数组,虽然它确实消除了抖动问题,但数组没有随着选择而更新...... 对不起,时间太久了,坦白说具体的我已经记不清了。我粘贴了我在 repo 中找到的代码,也许它会解决你的问题。 【参考方案1】:

我不知道...我所能推荐的只是尝试在 knockoutjs 谷歌小组中询问这个问题。它似乎很活跃,并且有专家回应此类问题。

【讨论】:

以上是关于KnockoutJS selectedOptions 绑定导致选择框在 IE8 中抖动的主要内容,如果未能解决你的问题,请参考以下文章

KnockoutJs:knockoutJs 上可用的 Event 类型都有哪些

KnockoutJS基础知识

Knockoutjs

KnockoutJS数组比较算法解析

识别 KnockoutJS 中的属性更改事件?

knockoutjs:值绑定独占还是点击事件?