Valueallowunset无法按预期运行

时间:2015-09-03 05:04:29

标签: knockout.js

在这里使用淘汰赛。我有一个像这样的HTML:

 <p>
Choose:
<select data-bind="options: countries
                   value: selectedCountry,
                   valueAllowUnset: false
                   "></select>
</p>

<p>Choice: <span data-bind="text: selectedCountry"></span> </p>

<button data-bind="click: changeCountry">Change Value</button>

这样的剧本:

function ViewModel() {
    var self = this;
    self.countries = ['list1','lsit2','list3'];
    self.selectedCountry = ko.observable('list4');
    self.changeCountry = function()     {
        self.selectedCountry('NEGA booom');
    };


ko.applyBindings(new ViewModel());

在加载和单击按钮时,跨度中显示的文本是正确的。当我改变下拉时它不会更新。

我阅读了大量关于淘汰赛的文档,并且不明白&#39; valueAllowUnset&#39;作品

编辑:关于这个问题的更多一点:我有一个动态渲染列表,基于所选择的其他一些选项。由于selectedCountryko.observable,当该列表清除以进行更新时,所有<options>都会消失,并且selectedCountry的值设置为undefined。< / p>

这是一个小提琴:

http://jsfiddle.net/jfakey/9300ngdw/2/

2 个答案:

答案 0 :(得分:1)

您正尝试将valueAllowUnset与ko 3.0版本一起使用,但稍后会从ko 3.1中引入 here

  

valueAllowUnset选项:现在有一个valueAllowUnset选项用于值与包含的值不匹配的场景   选项:

     
      
  • 如果将此选项设置为true,则Knockout不会强制该值与现有选项匹配。
  •   
  • 如果不匹配,选择将设置为空选项,但不会覆盖该值。
  •   

当您使用某些值进行更新时会出现问题,因为在这种情况下,选项会使事情变得混乱valueAllowUnset是一个救星,它将下拉选项设置为空以使事情不会失去同步

查看:

<p>Choose: <select data-bind="options: countries,,optionsCaption:'-select-',value: selectedCountry,valueAllowUnset: true"></select></p>
<p>Choice: <span data-bind="text: selectedCountry"></span> </p>
<button data-bind="click: changeCountry">Change Value</button>

检查 here 是否有工作样本

答案 1 :(得分:0)

我想这是一个较晚的答案,但由于我已经在这里... 问题在于“选项”绑定后昏迷缺失。 Knockoup只应用选项绑定,而忽略其余部分,因为它无法解析它。