2013-02-05 10 views
6

Chcę dostać wybranego obiektu opcjaknockoutjs Jak zdobyć wybraną opcję 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

Czy możesz umieścić swój prawdziwy kod w JSFiddle? Ponieważ to, co pokazałeś powinno zadziałać, zobacz: http://jsfiddle.net/Q7A76/ – nemesv

+0

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

+1

Po prostu usuń 'optionsValue: 'name'' i będzie działać poprawnie: http : //jsfiddle.net/9MKce/4/ – nemesv

Odpowiedz

16

Nie trzeba dodawać wybierz zdarzenie z kontrolą. Bardziej efektywny sposób na to, aby subskrybować selectedCountry zmian:

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

Jeśli nie chcesz, każdy kraj jest domyślnie zaznaczona trzeba dodać optionsCaption wiązania do data-bind:

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

Oto skrzypce pracy : http://jsfiddle.net/vyshniakov/tuMta/1/

+0

console.log (dane) // dump only string wybranej wartości i chcę skojarzyć macierz danych –

+2

Nie zwraca tylko ciągu znaków, zwraca wybrany element tablicy (np. Obiekt {countryName = "UK", countryPopulation = 65000000}). –

+1

Otrzymujesz tylko ciąg w selecetedCountery ze względu na optionsValue: 'name'. Usuń go z wiązania. –

Powiązane problemy