2016-05-03 4 views
0

Так что я использую нокаут и пытаюсь получить идентификатор выбранного элемента в своем javascript в событии изменения. Вот мой HTMLКак получить выбранное значение из выпадающего списка с помощью нокаута

<div id="platforms" data-bind="with: platformsViewModel"> 
      <p> 
       Selected Platform: 
       <select data-bind="options: platforms, optionsText: 'displayName', value: 'id', optionsCaption: 'Choose...', event: { change: loadMedias }" ></select> 
      </p> 
     </div> 

мой взгляд модель выглядит следующим образом

my.viewModels.PlatformsViewModel = function() { 
    var self = this; 

    self.platforms = ko.observableArray(); 
    self.message = ko.observable(); 

    self.loadMedias = function (data, event) { 
     my.loadMedias(data.id); 
    } 
} 

Что я здесь отсутствует?

ответ

4

Это выглядит, как это может быть легко исправить, где вы, возможно, с помощью value связывания, где вы должны использовать optionsValue связывания:

<select data-bind="options: platforms, optionsText: 'displayName', optionsValue: 'id', optionsCaption: 'Choose...', event: { change: loadMedias }" ></select> 
                   <!--^here --> 

Однако, почему бы не поставить логика в модели представления, а не на ваш взгляд:

my.viewModels.PlatformsViewModel = function() { 
    var self = this; 

    self.platforms = ko.observableArray(); 
    self.message = ko.observable(); 

    //new observable to hold selected platform 
    self.selectedPlatform = ko.observable(); 
    //subscribe to changes in the observable value to trigger the loading 
    self.selectedPlatform.subscribe(function(newValue) { 
     my.loadMedias(newValue.id); 
    }); 
} 

И обновленный <select> тха т будет связать реальный объект платформы выбран, а не только его ID:

<select data-bind="options: platforms, optionsText: 'displayName', value: selectedPlatform, optionsCaption: 'Choose...'" ></select> 
+0

в модели представления является большое предложение, и работает как шарм! Огромное спасибо. –

-1

Html:

<select name="ddlUsers" id="ddlUsers" class="form-control" 
          data-bind="options: ViewModel.CashierPage.AvailableCash, optionsText: 'OptionTextInfo', value: ViewModel.CashierPage.CashSelected, optionsCaption: 'Cassa...'"></select> 

в ЯШ:

public CashSelected: KnockoutObservable(); 
... 
self.CashSelected = ko.observable(null); 
self.CashSelected.subscribe(function(valueNewValue){/*your code*/});