Я только начал использовать нокаут, и у меня возникают проблемы с захватом текущего выбранного значения в моем раскрывающемся списке.
Вот мой пользовательский обработчик, поэтому KO будет работать с bootstrap-selectpicker, и я могу использовать опцию поиска в реальном времени.
ko.bindingHandlers.selectPicker = {
init: function (element, valueAccessor, allBindingsAccessor) {
if ($(element).is('select')) {
if (ko.isObservable(valueAccessor())) {
ko.bindingHandlers.value.init(element, valueAccessor, allBindingsAccessor);
}
$(element).selectpicker();
}
},
update: function (element, valueAccessor, allBindingsAccessor) {
if ($(element).is('select')) {
var selectPickerOptions = allBindingsAccessor().selectPickerOptions;
if (typeof selectPickerOptions !== 'undefined' && selectPickerOptions !== null) {
var options = selectPickerOptions.options,
optionsText = selectPickerOptions.optionsText,
optionsValue = selectPickerOptions.optionsValue,
optionsCaption = selectPickerOptions.optionsCaption;
if (ko.utils.unwrapObservable(options).length > 0) {
ko.bindingHandlers.options.update(element, options, ko.observable({ optionsText: optionsText, optionsValue: optionsValue, optionsCaption: optionsCaption }));
}
}
if (ko.isObservable(valueAccessor())) {
ko.bindingHandlers.value.update(element, valueAccessor);
}
$(element).selectpicker('refresh');
}
}
};
Далее я заполняю раскрывающийся список из своей базы данных.
function NewLoanViewModel() {
var self = this;
self.waitingLoanDutiesInfo = ko.observable(true);
self.ErrorFromHandler = ko.observable("");
self.offices = ko.observableArray([]);
LoadDDLs();
function LoadDDLs() {
$.ajax({
url: "/LoansX/KO/NewLoansHandler.ashx",
cache: false,
type: "POST",
data: { mode: 'loaddls' },
dataType: 'json'
}).done(function (data) {
if (typeof (data.e) != "undefined") {
self.ErrorFromHandler(data.e[0].description);
}
else {
ko.mapping.fromJS(data.d[0].offices, {}, self.offices);
self.waitingLoanDutiesInfo(false)
}
}).fail(function (jqXHR, textStatus) {
self.ErrorFromHandler(textStatus);
self.waitingLoanDutiesInfo(false)
});
}
}
Вот как выглядит мой выпадающий список:
<select class="form-control" data-bind="options: offices(),
optionsText: 'IDNAME',
optionsValue: 'ID',
selectPicker: true"
data-live-search="true">
</select>
Наконец, я пытаюсь получить текущее значение моего раскрывающегося списка нажатием кнопки:
this.NewLoanClick = function () {
var LoanType = this.dgvtypes.optionsValue();
alert(LoanType);
}
До сих пор я пытался сделать NewLoanViewModel.dgvtypes.optionsValue, dgvtypes.optionsValue и т. Д., Но большинство из них дают мне свойство объекта или ошибку метода.
Любые советы будут очень оценены, спасибо.