2013-03-04 87 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

相關問題