【问题标题】:Kendo UI Broken Bindings (Cascading Combos - parameterMap problems)Kendo UI Broken Bindings(级联组合 - 参数映射问题)
【发布时间】:2013-03-25 15:58:11
【问题描述】:

我正在使用 Kendo UI Combos 和淘汰赛。我正在尝试级联一个组合的结果以过滤另一个组合中的可用数据。

父combo中的dataTextField值不能按原样过滤子combo 数据,所以我使用 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; }}}

我确信有更好的方法来修改过滤器 - 有什么想法吗?

谢谢。

【问题讨论】:

  • 我之前没用过parameterMap,但是你使用的语法看起来像是无效的JS。看起来您只有 datatype 变量可供您使用。您也无法返回具有动态属性名称的对象文字。您需要创建一个对象并将其设置在该对象上,然后返回该对象。 (var obj = {}; obj[dynamicFieldName] = 'ParentId'; return obj;)
  • 谢谢RP,你是对的,js语法错误。这是成功实现级联组合的修改代码,其中 parentid 名称与 Parent 组合中使用的名称不同。参数映射:函数(数据,动作){ var filterStem;变量过滤器; 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 + ')' ; } 返回 filterStem + 过滤器; }}}
  • @user2208192 - 请不要在评论中发布代码,它很难阅读。请在问题中发布一个编辑,更好的是,在jsfiddle发布一个演示@
  • 对不起代码,我不是这里的常规海报;-)

标签: knockout.js cascade-filtering kendo-combobox


【解决方案1】:

您可以尝试将 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");
});

【讨论】:

  • 感谢您的建议,但我看不出这种方法如何帮助我“切换”用于过滤 odata 的字段 id?我在这里错过了什么吗?
  • 您可以轻松地切换字段,就像这样(它不是 jaydata 特定的,而是 kendoui 数据源的东西,但使用 jaydata 您不需要做任何其他事情) var datasource = remoteDB.Categories.asKendoDatasource( ); ... 将它与剑道小部件一起使用 ... ... 然后稍后 ... datasource.filter({ field: "Price", operator: "lt", value: 3 }); ... 或 ... datasource.filter({ field: "Name", operator: "eq", value: 'blah' });
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多