0

我真的很想找到在顶部列表框中显示所选项目的解决方案。我在这里使用敲除来绑定我的列表框。在我看来,列表框绑定如下

<select id ="multiAltVersion" multiple="multiple"  data-bind="options:  $root.editOnlyAlternativeVersions,  optionsText: 'PlatformVersionName',optionsValue: 'Id',selectedOptions:  $root.copiedAltVersion, chosen: true  "> </select>

我调用我的 WCF 服务来填充列表框。

    function loadVersionListByProductType(prodtype) {
        var input =
        {
            ProductType: prodtype

        };


        $.ajax({
            url: "../RestService/Test/ReturnData",
            type: "PUT",
            contentType: 'application/json',
            processData: false,
            data: JSON.stringify(input),
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert(errorThrown);
            },
            success: function (allData) {
                var mappedVersionListByProdType = $.map(allData, function (item) {

                    return new productVersionListByProductType(item);
                });
                self.editOnlyAlternativeVersions(mappedVersionListByProdType);


            }

        });

    }

当数据从 WCF 服务返回时,它按降序返回数据。但我想在顶部显示选中,然后以降序方式对列表进行排序。我从另一项服务中获取项目列表,并从另一项服务中获取选定项目。是否有意义?我如何使用 Jquery 来实现它?

4

2 回答 2

0

下载数据时可以使用Knockout中的排序功能:

editOnlyAlternativeVersions.sort(function(left, right)
{
    return left.selected == right.selected ? 
        // Selected is equal, so sort on name
        left.name == right.name ? 0 : (left.name < right.name ? -1 : 1) : (left.selected < right.selected ? -1 : 1)
})
于 2013-03-04T14:04:23.517 回答
0

一个使用计算的 observables 的简单示例(未经测试和未优化):

var myViewModel = function() {
   var options = ko.observableArray(["option1","option2","option3"]);
   var selected = ko.observable(options[2]);

   var sortedOptions = ko.computed(function() {
       var sorted = [];
       sorted.push(selected());
       for (var i=0; i < options().length; i++) {
           if(options()[i]!=selected()) {
              sorted.push(options()[i]);
           }
       }
       return sorted;
   });
}

然后绑定到sortedOptions,它应该是顺序:

option3, option1, option2

选择一个新选项将强制它重新计算,就像向options数组添加新选项一样。

于 2013-03-04T14:12:23.113 回答