2013-06-26 64 views
0

我試圖在下拉列表中預選一個值。我正在使用KnockoutJS並調用web服務將值推入我的列表。但是,我無法預先選擇我想要的值。非常感謝您的幫助。我也注意到沒有顯示放置在ko.utils.arrayFirst中的警報。謝謝!在下拉列表中預選值(選擇)KnockoutJS

<body> 
<form id="form1" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server"> 
    <Services> 
     <asp:ServiceReference Path="~/platform/vendors.asmx" /> 
     <asp:ServiceReference Path="~/platform/checkBooks.asmx" /> 
    </Services> 
</asp:ScriptManager> 
</form> 
<div> 
    <p> 
     Checkbooks: 
     <select data-bind="options: cb, value: choice, optionsText: 'name'"></select> 

    </p> 
</div> 

<script type="text/javascript"> 
    function errorHandler(errorObject) { 
     var errType = errorObject._exceptionType; 
     var errMsg = errorObject._message; 
     window.alert("ERROR" + errType + ":" + errMsg); 
     return false; 
    } 

    ko.observableArray.fn.find = function (prop, data) { 
     var valueToMatch = data[prop]; 
     return ko.utils.arrayFirst(this(), function (item) { 
      return (item[prop] === valueToMatch); 
     }); 
    }; 

    function viewModel() { 
     var self = this; 
     self.cb = new ko.observableArray([]); 

     self.call = function() { 
      try { 
       checkBooks.list("accounting", 2, "name:", self.retCheckBooks, errorHandler); 
      } 
      catch (ex) { 
       alert(ex.message); 
      } 
     } 
     self.retCheckBooks = function (results) { 
      for (var i = 1; i <= results.length; i++) { 
       self.cb.push({ id: i, name: results[i].shortName }); 
      } 
     } 
     var choice = { id: 4, name: "VCSTPAY" }; 
     self.choice = ko.observable(self.cb.find("id", choice)); 
    } 
</script> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     vm = new viewModel(); 
     vm.call(); 
     ko.applyBindings(vm); 
    }); 

</script> 

+0

你可以粘貼一個asmx文件輸出的樣本嗎?沒有它,我只是'checkBooks是未定義的'。 – woz

+0

嗨, 該webservice是一個非常大的文件,我指的是其中的其他cs文件。如果我嘗試把所有這些都放在這裏,它會令人困惑,而且非常大。我會看看我是否可以用更簡單的web服務發佈更好的示例。感謝您的關注。 – user1288906

+0

我不是指代碼。我只想在'checkBooks'中加入一些東西來測試你的JavaScript。 – woz

回答

1

到您的數據綁定和變化選擇添加optionsValue: "id"到:

self.choice = ko.observable(choice.id); 

默認情況下,KO不知道如何來比較你的選擇對象中匹配value到一個options

+0

爲什麼要添加額外的複雜性,而不是直接從數組中傳入對象,如self.choice = ko.observable(cb()[0]); ? –