У меня возникла проблема с пониманием того, как я должен получить выбранное значение выделенного (раскрывающегося) списка, с которым я привязался, используя 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..
Я уверен, что когда-то я вижу его на бумаге это все станет очевидным только в данный момент им изо всех сил, чтобы решить это.
Закрыть, удалите 'optionsValue: 'Id'' из элемента'
Отредактированный ответ, чтобы отразить комментарий @Dennis (спасибо, кстати). Если вы хотите, чтобы переменная была всей переменной электронной почты, переходите к тому, что он сказал; если вы просто хотите идентификатор, идите с тем, что я сказал. – ATayloe
И тогда вы могли бы: 'var selectedEmail = ko.computed (function() {return ko.utils.arrayFirst (EmailCollection(), function (email) {return email.Id() === selectedEmailId()});}); 'Теперь у вас есть лучшее из обоих миров! Хотя я бы, вероятно, пошел с selectedEmail и без optionsValue, так как нет разницы в производительности, и у вас есть доступ ко всему объекту электронной почты, а не только к идентификатору. И вы все еще можете иметь выбранный EmailID только с помощью: var varEventId = ko.computed (function() {return selectedEmail()? SelectedEmail(). Id(): null}); ', но теперь мы получаем предпочтение , – nwayve