Javascript 根据下拉列表中选定值的其他属性筛选本地剑道数据源

Javascript 根据下拉列表中选定值的其他属性筛选本地剑道数据源,javascript,kendo-ui,kendo-dropdown,Javascript,Kendo Ui,Kendo Dropdown,我有一个本地剑道数据源,它具有以下值: var dataSourceSearchOperators = new kendo.data.DataSource({ data: [ { OPERAND: "=", DATATYPE: "num", INFO: "Equal", OPERATOR: "eq" }, { OPERAND: "<>", DATATYPE: "num", INFO: "Not Equal", OPERATOR: "nq" }, { O

我有一个本地剑道数据源,它具有以下值:

var dataSourceSearchOperators = new kendo.data.DataSource({
    data: [
    { OPERAND: "=", DATATYPE: "num", INFO: "Equal", OPERATOR: "eq" },
    { OPERAND: "<>", DATATYPE: "num", INFO: "Not Equal", OPERATOR: "nq" },
    { OPERAND: ">", DATATYPE: "num", INFO: "Greater Than", OPERATOR: "gt" },
    { OPERAND: "CW", DATATYPE: "text", INFO: "Contains Word", OPERATOR: "contains" },
    { OPERAND: "CP", DATATYPE: "text", INFO: "Contains Partial", OPERATOR: "" },
    { OPERAND: "NC", DATATYPE: "text", INFO: "Does Not Contain", OPERATOR: "" },
    ],
});
我有一个dropdownlist绑定到远程剑道数据源,我想根据本地数据源中所选值的数据类型在该远程数据源上设置过滤。两个数据源共享公共属性数据类型。我基本上是过滤第二个DDL的结果。例如:

DDL1所选值为。然后仅显示DDL2中的值。远程数据源使用DATATYPE='num'进行过滤

我不想使用级联功能。使用javascript


谢谢

您只需查看下拉列表中的select事件。当值更改时,从所选项获取运算符,从中构建一个筛选器对象,并将其传递到远程数据源上的DataSource.filter中


这并不完全是我想要的,但我设法使用了您提到的select事件来进行筛选。这是一个很有帮助的例子。我唯一坚持的部分是将过滤器应用于dropdown2,该过滤器由datasource2 my local datasource填充,根据dropdown1 remote datasource中的当前值显示所有内容。如果你看我的例子,我想从dropdown1中获取“数据类型”,并将其应用于dropdown2结果。希望这是有道理的。那不是基本上是一样的吗?如果DDL2绑定到一个数据源,让我们称之为ddl2DataSource,那么您只需执行以下操作:ddl2DataSource.filter{field:'DATATYPE',operator:'eq',value:ddl1SelectedItem.DATATYPE};正当还是我错过了什么?你能把所有这些作为一个例子放到JSFIDLE或jsBin中吗?如果这没有尽可能优化,我很抱歉,但在这里你可以看到我在使用什么。如果你有建议,我可以让它变得更简单,那也太棒了。感谢您的帮助,期待您的回复。
var dataSourceSearchOperators = new kendo.data.DataSource({
    data: [
    { OPERAND: "=", DATATYPE: "num", INFO: "Equal", OPERATOR: "eq" },
    { OPERAND: "<>", DATATYPE: "num", INFO: "Not Equal", OPERATOR: "neq" },
    { OPERAND: ">", DATATYPE: "num", INFO: "Greater Than", OPERATOR: "gt" }
    ]
});

var dataSourceToFilter = new kendo.data.DataSource({
    data: [
        { value: 1 },
        { value: 2 },
        { value: 3 },
        { value: 4 }
    ],
    schema: {
        model: {
            value: { type: "number" }
        }
    }
});

var onFilterOperatorSelected = function (selectEvent) {
    var operator = selectEvent.sender.dataItem(selectEvent.item.index()).OPERATOR;
    var filter = {
        field: "value",
        operator: operator,
        value: 2
    };
    dataSourceToFilter.filter(filter);
};

$("#operators").kendoDropDownList({
    dataSource: dataSourceSearchOperators,
    dataTextField: "INFO",
    dataValueField: "OPERAND",
    select: onFilterOperatorSelected
});

$("#list").kendoListView({
    dataSource: dataSourceToFilter,
    template: "<li>${value}</li>"
});