Я использую Kendo UI Combos и нокаутом. Я пытаюсь каскадировать результаты одного комбо, чтобы фильтровать данные, доступные в другом.Kendo UI Broken Bindings (Cascading Combos - проблемы с параметрами)
Значение 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 удаляется он связывается правильно, но ребенок комбо не фильтруется, как и ожидалось.
Любая помощь, которая будет с благодарностью получена.
EDIT:
Вот пересмотренный код, который получает каскадный комбо работы:
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 неверен. Вот модифицированный код, который успешно реализует Cascading Combos, где имя родителя не совпадает с именем, используемым в группе Parent. parameterMap: function (data, action) { \t var filterStem; \t var filter; \t filterStem = '$ inlinecount = AllPages & $ сверху = 100 & $ = фильтр (LookupType + Eq + 15'; \t, если (data.filter.filters [1] === не определено) { \t \t фильтр = ')' ; } \t else { \t \t фильтр = '+ и + ParentId + eq +' + data.filter.filters [1] .value + ')'; \t} \t фильтр возвратаStem + фильтр; }}} – user2208192
@ user2208192 - Пожалуйста, не оставляйте комментарии в комментариях, их очень трудно прочитать. Пожалуйста, опубликуйте изменение в вопросе, еще лучше, разместите демо в [jsfiddle] (http://jsfiddle.net) –