3

我这里有三排。第一个下拉列表应显示所有名称。如果我从第一个下拉列表中选择一个名称,则下一个下拉列表不应包含在第一个下拉列表中选择的名称。

例如。如果我有 {Peter,John,Michael},第一滴应该显示所有三个选项。如果我在第一个下拉列表中选择 Peter,则下一行下拉列表应该只显示 {John,Michael}。如果我在第二个下拉列表中选择 John,则最终下拉列表应该只包含 Michael。

<table>
     <tbody data-bind="foreach: Items">
         <tr>
             <td>
                 <select data-bind="options: $root.Persons, optionsText: 'name', event :{ change: $parent.SelectionChanged }" />
             </td>
           </tr>
  </tbody>
</table>
4

2 回答 2

6

我做了一个简单的演示,说明你要做什么

function Person(firstName) {
    this.fname = firstName;
}

function ViewModel() {
    var self = this;
    self.FirstSelectedPerson = ko.observable();
    self.FirstSelectPersons = ko.observableArray([
    new Person('Mark'),
    new Person('Peter'),
    new Person('Smith')]);
    self.SecondSelectedPerson = ko.observable();
    self.SecondSelectPersons = ko.computed(function () {
        return ko.utils.arrayFilter(self.FirstSelectPersons(),

        function (person) {
            if (self.FirstSelectedPerson()) {
                if (person.fname.indexOf
                    (self.FirstSelectedPerson().fname) < 0) return true;
            }
        });
    });
}
ko.applyBindings(new ViewModel());

这是完整的代码JSfiddle

于 2013-06-10T16:19:27.463 回答
-1

您可以使用 linq 和 where 子句来省略已在回发中选择的条目。

于 2013-06-10T15:33:17.047 回答