2013-06-26 3 views
0

J'essaie de présélectionner une valeur dans une liste déroulante. J'utilise KnockoutJS et appelle un webservice pour pousser des valeurs dans ma liste. Cependant, je suis incapable de présélectionner la valeur que je veux. Votre aide est tres apprecie. J'ai également remarqué qu'une alerte placée dans ko.utils.arrayFirst n'est pas affichée. Merci!Présélectionnez la valeur dans une liste déroulante (select) 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

Pourriez-vous coller un exemple de la sortie des fichiers asmx? Sans cela, j'ai juste 'checkBooks is undefined'. – woz

+0

Salut, Le webservice est un très gros fichier et je parle de quelques autres fichiers cs à l'intérieur. Ce sera déroutant et extrêmement grand si j'essaye de mettre tout cela ici. Je vais voir si je peux donner un meilleur exemple avec un webservice plus simple. Merci d'avoir regardé ça. – user1288906

+0

Je ne parle pas du code. Je veux juste quelque chose à mettre dans 'checkBooks' pour tester votre JavaScript. – woz

Répondre

1

Ajouter optionsValue: "id" à votre choix de liaison de données et le changement à:

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

Par défaut, KO ne sait pas comment comparer vos objets de choix pour correspondre value à l'un des le options.

+0

Pourquoi ajouteriez-vous la complexité supplémentaire au lieu de simplement passer dans un objet directement à partir du tableau tel que self.choice = ko.observable (cb() [0]); ? –

Questions connexes