Knockoutjs, как получить выбранный параметр 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>

person Anil Gupta    schedule 05.02.2013    source источник
comment
Можете ли вы опубликовать свой реальный код, возможно, в JSFiddle? Поскольку то, что вы показали, должно работать, см.: jsfiddle.net/Q7A76.   -  person nemesv    schedule 05.02.2013
comment
jsfiddle.net/9MKce/3   -  person Anil Gupta    schedule 05.02.2013
comment
Просто удалите optionsValue:'name', и все будет работать нормально: jsfiddle.net/9MKce/4   -  person nemesv    schedule 05.02.2013
comment
спасибо @nemesv, но это создаст проблему при привязке данных ‹span data-bind=text: selectedSlider ›‹/span›   -  person Anil Gupta    schedule 05.02.2013


Ответы (1)


Вам не нужно добавлять событие выбора в элемент управления. Более эффективный способ — подписаться на selectedCountry изменения:

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

Если вы не хотите, чтобы какая-либо страна была выбрана по умолчанию, вам нужно добавить привязку optionsCaption к data-bind:

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

Вот рабочая скрипка: http://jsfiddle.net/vyshniakov/tuMta/1/

person Artem Vyshniakov    schedule 05.02.2013
comment
console.log(data) // дамп только строки выбранного значения, и я хочу связать массив данных - person Anil Gupta; 05.02.2013
comment
Он не возвращает просто строку, он возвращает выбранный элемент массива (например, Object {countryName= UK, countryPopulation=65000000}). - person Artem Vyshniakov; 05.02.2013
comment
Вы получаете только строку в selectedCountery из-за optionsValue: 'name'. Снимите его с привязки. - person Artem Vyshniakov; 05.02.2013