Kendo ui 当主数据源的值为null时,不会触发KendoUI ComboBox所需的验证
问题: 我有一个kendoui组合框,它设置为自动完成,有一个主数据源(正在编辑的记录)和一个辅助数据源(自动完成的数据)。 主数据源具有以下字段的架构:Kendo ui 当主数据源的值为null时,不会触发KendoUI ComboBox所需的验证,kendo-ui,kendo-combobox,kendo-validator,Kendo Ui,Kendo Combobox,Kendo Validator,问题: 我有一个kendoui组合框,它设置为自动完成,有一个主数据源(正在编辑的记录)和一个辅助数据源(自动完成的数据)。 主数据源具有以下字段的架构: 'primaryDS_SelectedItemID': { type: 'number', defaultValue: null, nullable: false } 组合框中的选定项值绑定到的。 现在,如果我在组合框中输入一个辅助数据源中不存在的值,primaryDS_SelectedItemID的值将为null,
'primaryDS_SelectedItemID': {
type: 'number',
defaultValue: null,
nullable: false
}
组合框中的选定项值绑定到的。
现在,如果我在组合框中输入一个辅助数据源中不存在的值,primaryDS_SelectedItemID的值将为null,这是正确的。
但是如果我用kendoValidator验证表单,它就会通过。但我不想这样。我需要一个规则来说明检查当前正在编辑的主数据源行的null或empty
我已尝试创建此规则,但问题是如何获取当前正在编辑的行
我有一个简单的例子来说明这个问题
HTML:
小提琴:
复制步骤:
1) 按下Validate按钮,您将看到验证在空值上工作
2) 在组合框中输入值:“test”,然后按下Validate按钮。您将看到验证在空值上不起作用
3) 按下日志记录按钮,您将看到primaryDS_SelectedItemID的值为空
谢谢你抽出时间
问候,
Scott如果选择组合框值之一,则您的
primaryDS\u SelectedItemID
也为空,因此您的currentDataView
无法正确绑定
但是,如果您只希望在选择了预选项目之一时进行验证,则可以使用自定义规则并检查绑定到secondaryDataSource
视图的内容
$(文档).ready(函数(){
var oViewModel={
currentDataView:{},
primaryDataSource:新建kendo.data.DataSource({
模式:{
型号:{
id:'primaryDS_id',
字段:{
“primaryDS_ID”:{
键入:“数字”
},
“primaryDS\u SelectedItemID”:{
键入:“编号”,
defaultValue:null,
可为空:false
}
}
}
}
}),
secondaryDataSource:新建kendo.data.DataSource({
数据:[
{secondaryDS_ID:1,secondaryDS_Name:'Item One'},
{secondaryDS_ID:2,secondaryDS_Name:'Item Two'},
{secondaryDS_ID:3,secondaryDS_Name:'第三项'}
],
总数:3,
模式:{
型号:{
id:'secondaryDS_id',
字段:{
“第二个ID”:{
键入:“数字”
},
“第二个名称”:{
键入:“字符串”
}
}
}
}
})
},
oValidator=$(“#形式”).kendoValidator({
规则:{
自定义规则:函数(输入){
if(input.is(“[name=Item]”)和&oViewModel.secondaryDataSource.\u view.length==0)
返回false;
返回true;
}
},
信息:{
自定义规则:“未知项”
}
}).数据(“kendoValidator”),
oComboBox=null;
oViewModel.currentDataView=oViewModel.primaryDataSource.add();
kendo.init($(“#组合框”);
oComboBox=$('comboBox')。数据('kendoComboBox');
oComboBox.setDataSource(oViewModel.secondaryDataSource);
剑道绑定(oComboBox,oViewModel);
$(“#验证”)。在('click',函数(){
oValidator.validate();
});
$('#logRecord')。在('click',函数(){
$('#status').text(JSON.stringify(oViewModel.secondaryDataSource.u视图));
});
});代码>
项目:
验证
日志记录
<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>
$(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));
});
});