为啥在刷新 Options 淘汰 observableArray 时我的 Select 值被取消选择(并且原始值仍然存在)?
Posted
技术标签:
【中文标题】为啥在刷新 Options 淘汰 observableArray 时我的 Select 值被取消选择(并且原始值仍然存在)?【英文标题】:Why is my Select value deselected when the Options knockout observableArray is refreshed (and the original value is still present)?为什么在刷新 Options 淘汰 observableArray 时我的 Select 值被取消选择(并且原始值仍然存在)? 【发布时间】:2020-10-14 13:45:57 【问题描述】:我使用 observable 作为我的值,使用 observableArray 作为我的选项。
更新选项时,会取消选择该值,即使旧值存在于刷新的列表中。
是否有某种方法可以确保在更改选项时重新选择该值?我以为这会自动发生,不知道这是否是预期的。
我的代码:
选择字段:https://github.com/stantond/OctoPrint-AirQuality/blob/9f0ddb275d17991811e80e1007840eb6d345c967/octoprint_airquality/templates/airquality_settings.jinja2#L125
计算选项数组:https://github.com/stantond/OctoPrint-AirQuality/blob/9f0ddb275d17991811e80e1007840eb6d345c967/octoprint_airquality/static/js/airquality.js#L25
日志输出:https://community.octoprint.org/uploads/default/original/2X/9/93a1e5959a6c2f8a22a0bf68592be766140fb4f9.png
【问题讨论】:
你所描述的当然是可能的。如果您在数组第一次填充其选项之前设置了可观察对象,则该值将被清除,因为该值当时不在列表中。如果您的 observable 存储的是完整对象而不是值类型,这也可能是一个等效问题。您必须展示您的一些代码或复制 sn-p。 谢谢,我添加了一些代码链接。我希望这是一个我没有足够经验发现的等效问题,但我认为还有其他事情发生。 【参考方案1】:我想我已经解决了。
这是需要使用 ko.toJS(oldValue) 来确保类型相同,并在 Select 字段中将 valueAllowUnset
设置为 true 的组合,以便在选项菜单没有的那一刻赶上,旧值不会过早清除。
【讨论】:
以上是关于为啥在刷新 Options 淘汰 observableArray 时我的 Select 值被取消选择(并且原始值仍然存在)?的主要内容,如果未能解决你的问题,请参考以下文章
我不知道为啥我必须在这个淘汰赛 observable 数组上调用 valueHasMutated