0

剣道 UI コンボとノックアウトを使用しています。あるコンボの結果をカスケードして、別のコンボで利用可能なデータをフィルタリングしようとしています。

親コンボの 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; }}}

フィルターを修正するより良い方法があると確信しています-何かアイデアはありますか?

ありがとう。

4

1 に答える 1

0

kendoUI + jaydata for 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");
});
于 2013-03-26T14:02:59.517 に答える