2013-03-25 66 views
0

我正在使用Kendo UI Combos和淘汰赛。我试图级联一个组合的结果来过滤另一个组合的数据。剑道UI断开绑定(级联组合 - parameterMap问题)

父组合中的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; }}} 

我敢肯定有一个更好的方式来修改过滤器 - 任何想法?

谢谢。

+1

我以前没有使用过'parameterMap',但是您使用的语法看起来像无效的JS。看起来你只有'data'和'type'变量可供你使用。您也无法返回带有动态属性名称的对象字面值。您需要创建一个对象并将其设置在该对象上,然后返回该对象。 ('var obj = {}; obj [dynamicFieldName] ='ParentId'; return obj;') – 2013-03-25 19:01:43

+0

感谢RP,你说得对,JS语法错误。这是修改后的代码,它成功实现了级联组合,其中父名称与父组合中使用的名称不同。 parameterMap:function(data,action)var filterStem; \t var filter; \t filterStem = '$ inlinecount =所有页&$顶部= 100&$滤波器=(LookUpType +当量+ 15'; \t如果(data.filter.filters [1] ===未定义){ \t \t滤波器= ')' ; } \t else { \t \t filter ='+ and + ParentId + eq +'+ data.filter.filters [1] .value +')'; \t} \t return filterStem + filter; }}} – user2208192 2013-03-26 12:17:40

+0

@ user2208192 - 请不要在评论中发布代码,这是非常难以阅读。请在问题中发布编辑,更好的是,在[jsfiddle](http://jsfiddle.net)发布演示 – 2013-03-26 13:31:49

回答

0

你可以尝试kendoUI + jaydata oData,这是一个成功的组合。 (免责声明:我为JayData工作)。我们在这里有一个关于级联组合的演示:http://jaydata.org/examples/KendoUI/cascadingcombobox.html 对于简单的级联组合,您只需要几行自定义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"); 
}); 
+0

感谢您的建议,但我不明白这种方法如何帮助我“切换”用于过滤odata的字段ID?我在这里错过了什么吗? – user2208192 2013-03-27 08:39:39

+0

你可以很容易地切换字段,像这样(这不是jaydata特定的,但kendoui数据源的东西,但与jaydata你不需要做任何事情)var datasource = remoteDB.Categories.asKendoDatasource(); ...使用kent widget ... ...然后... datasource.filter({field:“Price”,operator:“lt”,value:3}); ...或...datasource.filter({field:“Name”,operator:“eq”,value:'blah'}); – 2013-03-27 11:03:38