我使用knockout创建一个select元素,必须设置较晚的选项(通过从服务器加载选项来设置选项).这导致初始值丢失.下面我有一些工作代码,它做我想要的,但从服务器加载替换为静态表.
如果该行setupSelect();
被移动到脚本的末尾(这模拟了对服务器的异步ajax调用),那么select会要求我选择.
我认为当没有选择时,值会被覆盖,然后选择到达,但值现在为空.
看起来我知道问题是什么,但不知道如何让它发挥作用.
你能告诉我如何让它发挥作用吗?
Your thing: You have chosen a thing with id .
你也可以在这里看到这两个例子http://jsfiddle.net/V33NT/1/
这是默认的行为:Knockout强制该值与现有选项匹配,如果没有存在选项,则取消设置observable.
然而,KO 3.1中有新的设置.这被称为valueAllowUnset
,它正在解决这个问题.
来自Knockout.js 3.1发布
如果将此选项设置为true,则Knockout不会强制该值与现有选项匹配.
如果不匹配,则选择将设置为空选项,但不会覆盖该值.
这在选项延迟加载且存在现有值的情况下非常有用.
因此,如果您升级到Knockout.js 3.1,您可以写
<select data-bind="options: (function(){return $root.select2.rows;})(), optionsText: function(item){return item.name;}, optionsValue: function(item){return item.id;}, value: selectedThing2, valueAllowUnset: true, optionsCaption: 'Choose...'">
演示JSFIddle.