多重选择列表和KnockoutJS

Multiple Select List and KnockoutJS

本文关键字:KnockoutJS 列表 选择      更新时间:2023-09-26

我有一个多选择列表,我已经按照KO网站上的说明实现了。我的代码的重要部分目前看起来像这样(删除了不必要的代码):

function Attribute(data) {
    var self = this;
    self.Id = data.Id;
    self.Name = data.Name;
}
// Individual Row in Table
function Criteria(data) {
    var self = this;
    self.Attributes = data.Attributes;
}
// Represent the ViewModel for attributes.
function CriteriaViewModel() {
    var self = this;
    // Catalog Data
    self.availableAttributes = window.ko.observableArray([]);
    $.getJSON(window.attributeListUrl, function(availableData) {
        self.availableAttributes($.map(availableData.Attributes, function(item) { return new Attribute(item); }));
    });
    // Editable Data
    self.criterion = window.ko.observableArray([]);
    // Load initial state from server
    $.getJSON(window.criteriaListUrl, function (availableData) {
        self.criterion($.map(availableData.Criterion, function (item) { return new Criteria(item); }));
    });
}

然后,在我的HTML中,我将它们绑定在一起(或者,我至少尝试):

     <tbody data-bind="foreach: criterion">
            <tr>
                <td>
                    <select class="selectedAttributes"
                            data-bind="options: $root.availableAttributes, selectedOptions: Attributes, optionsText: 'Name', optionsValue: 'Id'"
                            multiple
                            size="6">
                    </select>
                </td>
            </tr>
     </tbody>

正确显示可能的选项。然而,标准的属性与可能的选项之间没有明显的绑定。从阅读指南来看,KO似乎应该能够直接绑定对象。有人能提供指导吗?

我忘了说,除了多选择列表的实际绑定,其他的都可以工作。一般来说,我恰当地应用了我的绑定——只是没有使用多选择列表。

Criteria对象的attributes属性需要是一个observableArray。下面是一个演示

的示例
function Criteria(data) {
    var self = this;
    self.Attributes = ko.observableArray(data.Attributes);
}

var x= $('#select1 option:selected');
   if(x.length>0){
       x.each(function(){
           alert($(this).text());
        self.selectedCategory.push(new categoryModel($(this).text()));
        $('#select1 option:selected').remove();
       });
   }

引用http://jsfiddle.net/deepakpandey1234/wse4gdLq/