2013-02-05 3 views
6

ich die gewählte Option Objektknockoutjs wie die gewählte Option erhalten Arrayobject

<select data-bind="options: availableCountries, 
         value: selectedCountry, event: { select: onSelect}"></select> 


<script type="text/javascript"> 
    // Constructor for an object with two properties 
    var Country = function(name, population) { 
     this.countryName = name; 
     this.countryPopulation = population; 
    };  

    var viewModel = { 
     availableCountries : ko.observableArray([ 
      new Country("UK", 65000000), 
      new Country("USA", 320000000), 
      new Country("Sweden", 29000000) 
     ]), 
     selectedCountry : ko.observable(), // Nothing selected by default 
     onSelect: function(){ 
       console.log(viewModel.selectedCountry) 
       // it is showing just an country name and what i what is whole object 
       // e.g. { "UK", 65000000 } // that is selected option in selected box 

     } 

    }; 
</script> 
+0

Können Sie einen echten Code vielleicht in einem JSFiddle posten? Weil das, was Sie gezeigt haben, funktioniert, sehen Sie: http://jsfiddle.net/Q7A76/ – nemesv

+0

http://jsfiddle.net/9MKce/3/ –

+1

Entfernen Sie einfach den Namen 'optionsValue: 'und es wird gut funktionieren: http : //jsfiddle.net/9MKce/4/ – nemesv

Antwort

16

Sie haben nicht hinzuzufügen, wählen Sie Ereignis an den Griff bekommen wollen. Effizientere Art und Weise auf selectedCountry Änderungen abonnieren ist:

<select data-bind="options: availableCountries, 
         optionsText: 'countryName', 
         value: selectedCountry, 
         optionsCaption: 'Select...'"></select> 

Hier arbeiten Geige:

viewModel.selectedCountry.subscribe(function (data) { 
     console.log(data) 
    }); 

Wenn Sie nicht wollen, jedes Land standardmäßig aktiviert ist, haben Sie optionsCaption Bindung an die data-bind hinzufügen : http://jsfiddle.net/vyshniakov/tuMta/1/

+0

console.log (Daten) // Nur Dump-String von ausgewählten Wert und ich möchte associate Datenarray –

+2

Es gibt nicht nur eine Zeichenfolge zurück, es gibt ausgewählte Element des Arrays (dh Objekt {countryName = "UK", countryPopulation = 65000000}). –

+1

Sie erhalten nur eine Zeichenfolge in selectedCountry wegen optionsValue: 'name'. Entferne es von der Bindung. –

Verwandte Themen