Как мне одновременно использовать Knockout Validation и Knockcout X-editable?

Я использую Bootstrap, Knockout и X-editable с нокаутными привязками в своем проекте ASP.NET. Я не могу заставить проверку работать. Согласно нокауту x-editable (https://github.com/brianchance/knockout-x-editable< /а>):

«Если вы используете Knockout.validation, я подключил вызов isValid наблюдаемого объекта для editable.validate. Для работы это должно поместить новое значение в наблюдаемое, затем проверить, а затем вернуться обратно. Если вы подписались на изменения, вы их увидите. Не лучший выбор, но работает».

Это правда, isValid называется. Я настраиваю переменную нокаута следующим образом (проверка нокаута):

self.num1 = ko.observable().extend({ number: true, min: 0.01, max: 10e10 });

В моем cshtml я включаю bootstrap-editable.css и bootstrap-editable.js, knockout-{version}.js, knockout.validation.js, knockout.x-editable.js. У меня нет сообщения об ошибке на консоли, красиво всплывает диалоговое окно с возможностью редактирования x, и происходит изменение значения. Однако проверка просто не происходит. Я думал, что x-editable сам передаст проверку тому, что я определил с проверкой нокаута. Должен ли я реализовать какую-либо функцию isValid или что-то в этом роде? Как мне вызвать Knockout.Validation, если я реализую isValid? Я потерялся.


person Csaba Toth    schedule 06.01.2015    source источник
comment
Вы настроили нокаут-валидацию с помощью ko.validation.configure?   -  person Wayne Ellery    schedule 06.01.2015
comment
Нужно ли мне? Позвольте мне проверить это.   -  person Csaba Toth    schedule 06.01.2015
comment
да. Вам нужно сделать это   -  person Wayne Ellery    schedule 06.01.2015
comment
Вместо этого вы можете вызвать init, вы это вызывали?   -  person Wayne Ellery    schedule 06.01.2015
comment
Я думал, что есть конфигурация по умолчанию. Я проверяю.   -  person Csaba Toth    schedule 06.01.2015
comment
Я думаю, вам все еще нужно вызвать init. Попробуйте добавить ko.validation.init();   -  person Wayne Ellery    schedule 06.01.2015
comment
В моем jsfiddle мне нужно вызвать init. Если я закомментирую это, сообщения об ошибках не будут отображаться: jsfiddle.net/85pt31rL   -  person Wayne Ellery    schedule 06.01.2015
comment
Я пытался добавить его до, а затем после applyBindings. Вероятно, у меня ошибка в другом месте. Может быть, я исключаю x-editable и смотрю, работает ли проверка без него.   -  person Csaba Toth    schedule 06.01.2015
comment
Хорошо, у меня проблема. Моя конфигурация была на самом деле такой: self.num1 = ko.observable().extend({ number: true, min: 0.01, max: 10e10, numeric: 2 });. Последняя числовая вещь — это моя собственная привязка проверки, и она мешает проверке ko таким образом, что проверка не происходит (также нет сообщения об ошибке). Поэтому мне нужно доработать собственное расширение. Он проверит, имеет ли число две десятичные дробные цифры.   -  person Csaba Toth    schedule 06.01.2015
comment
В моей настройке ko.validation работает из коробки даже без явного вызова init. Я не должен был одновременно вводить свою специальную привязку проверки и нокаутирующий x-редактируемый... Здесь уже прошло 2 часа ночи, пора спать :P   -  person Csaba Toth    schedule 06.01.2015
comment
У вас есть специальная проверка с использованием нокаутной проверки. Взгляните на github.com/Knockout-Contrib/Knockout- Проверка/вики/   -  person Wayne Ellery    schedule 06.01.2015
comment
Я на нем, все еще не сплю :)   -  person Csaba Toth    schedule 06.01.2015


Ответы (2)


Проверка работает только со значением и selectedOptions из коробки, если вы используете пользовательскую привязку, вам нужно использовать ko.validation.makeBindingHandlerValidatable

ko.validation.makeBindingHandlerValidatable("selectedOptions");
person Anders    schedule 06.01.2015

Моя конфигурация была на самом деле такой: self.num1 = ko.observable().extend({ number: true, min: 0.01, max: 10e10, numeric: 2 });. Последнее, что "numeric" - это моя собственная привязка проверки, и она мешает проверке ko таким образом, что проверка не происходит (также нет сообщения об ошибке).

Если вы хотите использовать собственную проверку, выполните следующие действия: https://github.com/Knockout-Contrib/Knockout-Validation/wiki/User-Contributed-Rules

Еще одна вещь, которую следует учитывать в отношении нокаутной x-редактируемой привязки проверки:

Чтобы работать, это должно поместить новое значение в наблюдаемое, затем проверить, а затем вернуться обратно. Если вы подписались на изменения, вы их увидите.

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

person Csaba Toth    schedule 26.01.2015