Knockout.js 剑道UI断开绑定(级联组合-参数映射问题)

Knockout.js 剑道UI断开绑定(级联组合-参数映射问题),knockout.js,cascade-filtering,kendo-combobox,Knockout.js,Cascade Filtering,Kendo Combobox,我正在使用剑道UI组合和击倒。我试图级联一个组合的结果,以过滤另一个组合中可用的数据 父组合中的dataTextField值不能按原样用于筛选子组合 数据,所以我使用parameterMap选项来更改它。不幸的是,这似乎不起作用,我收到一个错误时,绑定 Message: SyntaxError: Expected ':'; Bindings value: kendoComboBox: {scrollable: { virtual: true } ,filte

我正在使用剑道UI组合和击倒。我试图级联一个组合的结果,以过滤另一个组合中可用的数据

父组合中的dataTextField值不能按原样用于筛选子组合 数据,所以我使用parameterMap选项来更改它。不幸的是,这似乎不起作用,我收到一个错误时,绑定

Message: SyntaxError: Expected ':';

Bindings value: kendoComboBox: 
    {scrollable: 
        { virtual: true }
    ,filter: 'contains',
    pageable: true, 
    dataTextField: 'Description', 
    dataValueField: 'Id', 
    autoBind: false, 
    placeholder: 'Select...' ,
    cascadeFrom: 'NotifierServiceType',
    dataSource: 
        {type : 'odata',
        serverPaging: true,
        serverFiltering: true,
        serverSorting: true,
        pageSize: 100,
        filter : {field : 'LookUpType', operator : 'eq', value:15},
        transport: {    
                read: {        url: 'http://xxx/INS/services/LookUpService.svc/LookUpItems',        dataType: 'json'    } , 
                parameterMap: function(data, type) 
                    { return { filter[filters][0][field]: 'ParentId';}
                } 
            }
        }, 
    value:notifierSubDivisionId
    }
删除parameterMap节后,它将正确绑定,但子组合未按预期进行筛选

任何帮助都将受到感激

编辑:

下面是使级联组合正常工作的修订代码:

parameterMap: function(data, action) { 
    var filterStem; 
    var filter; 
    filterStem = '$inlinecount=allpages&$top=100&$filter=(LookUpType+eq+15';
    if (data.filter.filters[1] === undefined){  
        filter = ')'; }
    else {
        filter = '+and+ParentId+eq+' + data.filter.filters[1].value + ')' ;
    }  
    return filterStem + filter; }}}
我相信有更好的方法来修改过滤器-有什么想法吗


谢谢。

你可以为oData尝试kendoUI+jaydata,这是一个成功的组合。(免责声明:我为JayData工作)。我们这里有一个关于级联组合的演示: 对于一个简单的级联组合,您只需要几行自定义javascript代码

$data.initService(url)
.then(function (remoteDB) {
    $("#categories").kendoComboBox({
      placeholder: "Select category...",
      dataTextField: "Category_Name",
      dataValueField: "Category_ID",
      dataSource: remoteDB.Categories.asKendoDataSource()
    });

    var products = $("#products").kendoComboBox({
      autoBind: false,
      cascadeFrom: "categories",
      placeholder: "Select product...",
      dataTextField: "Product_Name",
      dataValueField: "Product_ID",
      dataSource: remoteDB.Products.asKendoDataSource()
    }).data("kendoComboBox");
});

我以前没有使用过
parameterMap
,但是您使用的语法看起来像是无效的JS。看起来您只有
数据
类型
变量可用。您也将无法返回具有动态属性名称的对象文字。您需要创建一个对象并在该对象上设置它,然后返回该对象。(
var obj={};obj[dynamicFieldName]='ParentId';return obj;
)谢谢RP,你说得对,js语法是错误的。下面是成功实现级联组合的修改代码,其中parentid名称与父组合中使用的名称不同。parameterMap:function(data,action){var filterStem;var filter;filterStem='$inlinecount=allpages&$top=100&$filter=(LookUpType+eq+15';if(data.filter.filters[1]==undefined){filter='';}else{filter='+和+ParentId+eq+'+data.filter.filters[1].value+';}返回filters+filter;}}}@user2208192-请不要在评论中发布代码,这很难阅读。请在问题中发布编辑,更好的是,在“对不起”中发布一个关于代码的演示,我不是这里的普通海报;-)谢谢你的建议,但我看不出这种方法如何帮助我“切换”用于过滤odata的字段id?我在这里遗漏了什么吗?您可以很容易地切换字段,类似这样(它不是特定于jaydata,而是kendoui数据源,但使用jaydata您不需要做任何其他事情)var datasource=remoteDB.Categories.asKendoDatasource()。。。与剑道小部件一起使用。。。后来。。。筛选器({字段:“Price”,运算符:“lt”,值:3})。。。或filter({field:“Name”,operator:“eq”,value:'blah'});