淘汰:在对象不起作用的情况下进行多选

Knockout: multiple select with objects not working

本文关键字:情况下 对象 不起作用 淘汰      更新时间:2023-09-26

我使用的是Knockout 3.2,我试图显示一个包含一些选定值的多选下拉列表,但这些值没有被选中。问题是KO没有填充选项的"值"属性:

<select data-bind="options: availableCountries, selectedOptions: chosenCountries, optionsText: 'name'" size="5" multiple="true">
    <option value="">France</option>
    <option value="">Germany</option>
    <option value="">Spain</option>
</select>

VM:

var viewModel = {
      availableCountries : ko.observableArray([{name:'France'}, {name:'Germany'}, {name:'Spain'}]),
        chosenCountries : ko.observableArray(['Germany'])
    };

如果不是对象i,而是将availableCountries变成一个简单的字符串数组,它就可以工作了。

您可以在此处看到实时样本

var viewModel = {
    availableCountries : ko.observableArray([{name:'France'}, {name:'Germany'}, {name:'Spain'}]),
    chosenCountries : ko.observableArray(['Germany'])
};

['Germany']不是{name: 'Germany'}

同样,如果您要编写chosenCountries : ko.observableArray([{name: 'Germany'}]),这将导致两个不同的对象,具有相同的属性name和值'Germany'

var viewModel = (function() {
   var self = {};
   self.availableCountries = ko.observableArray([{name:'France'}, {name:'Germany'}, {name:'Spain'}]);
   self.chosenCountries = ko.observableArray([self.availableCountries()[1]]);
   return self;
})();
ko.applyBindings(viewModel);

我将viewModel更改为一个名为函数的instand,该函数返回viewModel。

(函数(){…})()&lt-调用

http://jsbin.com/monasijufaya/1/edit?html,js,输出

相关文章: