2013-03-04 82 views
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的?

+0

你为什么使用'PUT'来获取'GET'数据? – 2013-03-04 14:00:56

+0

在你的问题上,你可以使用一个计算属性返回一个顶部选定项目的数组。 – 2013-03-04 14:02:08

+0

@MattBurland我用json格式发送数据。但这与问题有关吗? – DevelopmentIsMyPassion 2013-03-04 14:02:32

回答

0

您可以使用在淘汰赛sorting functionality当你下载的数据:

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) 
}) 
+0

我想我不能使用这种方法,因为我得到一个可观察数组中的列表和其他可观察数据中的选定项。不知道如何使用这个。 – DevelopmentIsMyPassion 2013-03-04 14:47:52

0

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

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 

Sel执行一个新的选项将迫使它重新计算,同时向options阵列添加新的选项。

+0

在我的变量选项中,我得到的数组如下productVersionListByProductType {Id:function,Name:function,PlatformVersionName:function,ProductEntityId:function,CompatibilityLevel:function}。在我选择的变量中,我获得[49,43]的数据。所以我改变了条件if(options()[i] .Id()!= selected())。它仍然不起作用。 – DevelopmentIsMyPassion 2013-03-04 14:45:05

+0

另外这sortedOptions是列表框的html propery? – DevelopmentIsMyPassion 2013-03-04 14:50:58

+0

是否可以发布小提琴? – DevelopmentIsMyPassion 2013-03-04 14:55:15

相关问题