0

У меня возникла проблема с пониманием того, как я должен получить выбранное значение выделенного (раскрывающегося) списка, с которым я привязался, используя knockout.mapping.knockout.mapping выпадающий список, получить выбранное значение

Херес Аякса вызов и отображение:

var EmailCollection; 
function GetAllEmailsAjax() { 

      $.ajax({ 
       url: "http://localhost:54756/api/Email", 
       type: "GET", 
       dataType: "JSON", 

       success: function (data) { 
        GetAllEmails(data); 
       } 
      });    
     } 
     function GetAllEmails(data) { 
      // not sure if this is 100% correct but it does seem to work as expected 
      if (!EmailCollection) { 
       EmailCollection = ko.mapping.fromJS(data); 
      } 
      ko.mapping.fromJS(data, EmailCollection); 
      ko.applyBindings(EmailCollection); 
     } 
<select data-bind="options: EmailCollection, optionsText: 'Name', optionsValue: 'Id', optionsCaption: 'Choose...'"></select> 

, как я понимаю, мне нужно указать значение выбора атрибута данных привязки. Так было бы примерно так:

Однако это означало бы, что selectedEmail должен быть частью моей модели. Однако, поскольку все это создается knockout.mapping im unsure, как я это делаю. Я предполагаю, что какая-то модель похожа на следующую, но я не уверен, как это сделать.

var EmailViewModel = { 
    selectedEmail : ko.Observable(), 
    Emails : EmailCollection // the previous model mapped bound in a scenario like this 
}; 
// EmailViewModel.selectedEmail() would then contain my selected value.. 

Я уверен, что когда-то я вижу его на бумаге это все станет очевидным только в данный момент им изо всех сил, чтобы решить это.

ответ

1

Если будет выбрано только одно электронное письмо (подразумевается с момента выпадающего списка), вы должны создать переменную для хранения выбранного идентификатора электронной почты. Если он по умолчанию первой электронной почты в коллекции, вы могли бы сделать что-то вроде этого:

var selectedEmailId: ko.observable(); 
... 
function GetAllEmails(data) { 
... 
ko.mapping.fromJS(data, EmailCollection); 
selectedEmailId(EmailCollection.peek().Id); //Assuming EmailCollection is an array 
ko.applyBindings(EmailCollection); 
} 

<select data-bind="options: EmailCollection, optionsText: 'Name', optionsValue: 'Id', 
    optionsCaption: 'Choose...', value: selectedEmailId"></select> 

selectedEmailId должен затем быть обновлен в любое время выбора выпадающего меняются.

+0

Закрыть, удалите 'optionsValue: 'Id'' из элемента'