Проблема: у меня есть kendoui ComboBox, который настроен для автозаполнения с использованием первичного источника данных (редактируемая запись) и вторичного источника данных (данные для автозаполнения). Первичный источник данных имеет схему с полем:
'primaryDS_SelectedItemID': {
type: 'number',
defaultValue: null,
nullable: false
}
к которому привязывается значение выбранных элементов в comboBox. Теперь, если я введу значение в поле со списком, которое не существует во вторичном источнике данных, значение primaryDS_SelectedItemID будет нулевым, что правильно. Но если я затем проверю форму с помощью kendoValidator, она пройдет. Но я этого не хочу. Мне нужно правило, указывающее, является ли он пустым или пустым, которое проверяет строку основного источника данных, который в настоящее время редактируется.
Я попытался создать это правило, но проблема в том, как получить строку, которая в настоящее время редактируется?
У меня есть простой пример, демонстрирующий проблему.
HTML:
<div id="form" style="padding:10px">
<label>Item:</label>
<input id="comboBox"
name="Item" data-role="combobox"
data-placeholder="Type an Item Name"
data-value-primitive="true"
data-text-field="secondaryDS_Name"
data-value-field="secondaryDS_ID"
data-filter="startswith"
data-auto-bind="false"
data-bind="value: currentDataView.primaryDS_SelectedItemID"
required />
<span class="k-invalid-msg" data-for="Table Name"></span>
<button id="validate">Validate</button>
</div>
JavaScript:
$(document).ready(function () {
var oViewModel = {
currentDataView: {},
primaryDataSource: new kendo.data.DataSource({
schema: {
model: {
id: 'primaryDS_ID',
fields: {
'primaryDS_ID': {
type: 'number'
},
'primaryDS_SelectedItemID': {
type: 'number',
defaultValue: null,
nullable: false
}
}
}
}
}),
secondaryDataSource: new kendo.data.DataSource({
data: [
{ secondaryDS_ID: 1, secondaryDS_Name: 'Item One' },
{ secondaryDS_ID: 2, secondaryDS_Name: 'Item Two' },
{ secondaryDS_ID: 3, secondaryDS_Name: 'Item Three' }
],
total: 3,
schema: {
model: {
id: 'secondaryDS_ID',
fields: {
'secondaryDS_ID': {
type: 'number'
},
'secondaryDS_Name': {
type: 'string'
}
}
}
}
})
},
oValidator = $("#form").kendoValidator().data("kendoValidator"),
oComboBox = null;
oViewModel.currentDataView = oViewModel.primaryDataSource.add();
kendo.init($('#comboBox'));
oComboBox = $('#comboBox').data('kendoComboBox');
oComboBox.setDataSource(oViewModel.secondaryDataSource);
kendo.bind(oComboBox, oViewModel);
$('#validate').on('click', function () {
oValidator.validate();
});
$('#logRecord').on('click', function () {
$('#status').text(JSON.stringify(oViewModel.currentDataView));
});
});
Сценарий: http://jsfiddle.net/codeowl/Mq6ee/5/
Шаги репликации:
1) Нажмите кнопку «Проверить», и вы увидите, что проверка работает с пустым значением.
2) Введите значение: «test» в поле со списком и нажмите кнопку «Проверить». Вы увидите, что проверка не работает с нулевым значением.
3) Нажмите кнопку «Запись журнала», и вы увидите, что значение primaryDS_SelectedItemID равно нулю.
Спасибо за уделенное время,
С уважением,
Скотт