【发布时间】: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。看起来您只有data和type变量可供您使用。您也无法返回具有动态属性名称的对象文字。您需要创建一个对象并将其设置在该对象上,然后返回该对象。 (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