KnockoutJS选择选项和选定值

asw*_*ows 19 knockout.js

类似的问题:选择元素的初始值

我在设置select元素的初始值时遇到问题.我基本上有一个从服务器进来的种子数据列表来填充下拉列表,我希望所选的值代表应从实体中选择的内容.

由于数据模型的选定值不等于种子数据中的对象引用,因此不会选择任何内容.

现在,我循环遍历每个实体,找到正确的选定值,设置等于种子数据的等价物,然后Knockout知道如何连接它.

这有更优雅的解决方案吗?我摆弄了一个简单的例子,里面有更多细节...... http://jsfiddle.net/hbrYM/14/

mad*_*kay 35

正确猜测selectedValue引用不匹配,因此KO不会选择该项.使其工作的方法是不将复杂对象保存在所选值中,而是选择ID,因为基本类型相等可以成功并选择正确的值.

http://jsfiddle.net/VLTFB/3/

您需要在选项绑定上使用optionsValue选项(如果这有意义:)

<select data-bind="options: seedData,
                    optionsText: 'firstName',
                    optionsValue: 'ID',
                    value: data.selectedValue">
Run Code Online (Sandbox Code Playgroud)

编辑

如上所述,您可以使用计算(未经测试)重新选择正确的项目.

vm.currentlySelected = ko.computed(function () { 
   for (var i = 0; i < this.seedData().length; i += 1) {
       var data = this.seedData()[i];
       if (data.ID === this.selectedValue()) {
           return data;
       }
   }
   return null;
}, vm);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • ko select binding实际上缺少某种"对象引用管理".有时我们希望将optionValue设置为特定属性,以便它可以自然地发送回服务器(例如使用form.submit()而无需修改),但仍然能够处理当前选定的对象以进行javascript工作它,目前用KO无法完成. (2认同)
  • 如果不清楚,optionsValue需要是一个数字.如果您尝试将其设置为字符串值,它将不会绑定,您将拥有一个空值属性. (2认同)