2013-03-25 4 views
0

검도 UI 콤보 및 녹아웃을 사용하고 있습니다. 한 콤보의 결과를 캐스 캐 이드하여 다른 데이터에서 사용할 수있는 데이터를 필터링하려고합니다.검도 UI 깨어진 바인딩 (계단식 콤보 - 매개 변수 맵 문제)

상위 콤보의 dataTextField 값을 그대로 사용하여 자식 콤보 데이터를 필터링 할 수 없으므로 parameterMap 옵션을 사용하여 변경합니다. 불행하게도이 작동하지 않는 것, 그리고 바인딩 할 때 나는 ... 오류가 수신 된 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: 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] = '부모 자식'; return obj;') –

+0

고마워 RP, 네 말이 맞아, js 구문이 틀렸다. parentid 이름이 parent 콤보에서 사용 된 것과 같지 않은 곳에서 Cascading Combos를 성공적으로 구현 한 수정 된 코드가 있습니다. parameterMap : function (data, action) { \t var filterStem; \t var 필터; \t filterStem = '$ inlinecount = $ & 목록 allpages 가기 = 100 = $ 필터 (LookUpType + 당량 + 15'; \t 경우 (data.filter.filters [1] === 정의) { \t \t 필터 = ')' ; } \t else { \t \t filter = '+ 및 + ParentId + eq +'+ data.filter.filters [1] .value + ')' '; \t} \t return filterStem + filter; }}} – user2208192

+0

@ user2208192 - 제발 코멘트에 코드를 게시하지 마십시오, 그것은 아주 읽기 어렵습니다. [jsfiddle] (http://jsfiddle.net) –

답변

0

oData에 대해 kendoUI + jaydata를 시도해 볼 수 있습니다. 이는 우승 한 콤보입니다. (면책 조항 : 나는 JayData에서 일한다). 계단식 콤보에 대한 데모가 있습니다 : http://jaydata.org/examples/KendoUI/cascadingcombobox.html 간단한 계단식 콤보에는 몇 줄의 커스텀 자바 스크립트 코드 만 있으면됩니다.

$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

+0

당신은 필드를 쉽게 변경할 수 있습니다. (이것은 jaydata에 특정한 것이 아니라 kendoui 데이터 소스에 관한 것이지만 jaydata로는 다른 것을 할 필요가 없습니다.) var datasource = remoteDB.Categories.asKendoDatasource(); ... 검도 위젯과 함께 사용하십시오 ... ... then later ... datasource.filter ({field : "Price", operator : "lt", value : 3}); ... 또는 ... datasource.filter ({field : "Name", 연산자 : "eq", 값 : 'blah'}); –