Kendo ui 当主数据源的值为null时,不会触发KendoUI ComboBox所需的验证

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,

问题: 我有一个kendoui组合框,它设置为自动完成,有一个主数据源(正在编辑的记录)和一个辅助数据源(自动完成的数据)。 主数据源具有以下字段的架构:

'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));
    }); 


});