Проверка нокаута с привязкой выбора не добавляет ErrorElement.css

Я работаю с нокаутом и хочу, чтобы пользователь выбрал один из элементов в теге выбора html. По умолчанию выбрано пустое значение

<select required>
            <option value="">--Select something</option>
            <option value="True">True</option>
            <option value="False">False</option>

And viewModel contain:

self.sampleBooleanValue.extend({required : true});

Я ожидал, что следующая привязка поможет

<select data-bind="value: sampleBooleanValue" required>

 ....
</select>

Проверка работает, но для выбора тега не добавляется класс css. Кто-нибудь может сказать, почему это не работает? P.S. Он работает с другими входными тегами.


person Nazar Harasym    schedule 15.06.2013    source источник
comment
Вы убедились, что класс не добавлен в элемент DOM списка выбора? или вы просто предположили, что это не так, потому что визуальные эффекты css не показывались?   -  person Matthew Cox    schedule 16.06.2013
comment
Я убедился, что он добавляет только пустой атрибут класса без имени класса (пример: ‹выберите .... класс ....›)   -  person Nazar Harasym    schedule 17.06.2013
comment
Можете ли вы опубликовать свой ko.validation.init( /* options object */ ); вызов, который вы сделали для настройки добавления имени класса.   -  person Matthew Cox    schedule 17.06.2013
comment
Вы уверены, что у вас нет ошибок в разметке? Можете ли вы опубликовать скрипку?   -  person morleyc    schedule 26.07.2013


Ответы (1)


Я испытал то же самое на более сложной модели, где класс ошибок не применялся, в этом случае я создал валидатор selectedItemNotCaption, и он работал там, где required: true не работал (я полагаю, что это могло быть связано с ошибкой на моей метке что я не закрыл файл , но это помогло мне продолжить расследование).

Попробуйте приведенный ниже пользовательский валидатор со здесь.

model = function () {
var self = this;
self.optionsAvailable = ['one', 'two'];

self.selectedOptionWithRequired = ko.observable().extend({
    required: true
});

self.selectedOption = ko.observable().extend({
    selectedItemNotCaption: true
});

self.submit = function () {
    console.log("checking for errors...");
    self.errors.showAllMessages();
};

self.errors = ko.validation.group(self);
};

ko.validation.configure({
insertMessages: false,
decorateElement: true,
errorElementClass: 'error'
});

ko.validation.rules['selectedItemNotCaption'] = {
validator: function (val) {
    console.log("in validator..." + val);
    return (typeof val != "undefined");
},
message: 'Please select an option'
};

ko.validation.registerExtenders();

ko.applyBindings(new model());
person morleyc    schedule 26.07.2013