0

Я не уверен, что я делаю это правильно, поскольку я новичок в целых этих системах, но я хочу управлять своими данными сетки кендо (разбиение на страницы, фильтры и т. Д.). Я использую этот ODataController в ASP.NET Web API 2, управляемый из версии 4 пакета OData, который поддерживает такие параметры, как: $ top, $ skip, $ count. и т. д. ...kendo - datasource - параметрMap не связывает параметры

Должно быть прочитано много неполного мира привет, образцы, стека,):

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <title>AngularJS</title> 
    <link href="../content/shared/styles/examples-offline.css" rel="stylesheet"> 
    <link href="../Content/telerik/content/web/kendo.common.min.css" rel="stylesheet"> 
    <link href="../Content/telerik/content/web/kendo.rtl.min.css" rel="stylesheet"> 
    <link href="../Content/telerik/content/web/kendo.default.min.css" rel="stylesheet"> 
    <script src="../Content/telerik/scripts/jquery.min.js"></script> 
    <script src="../Content/telerik/scripts/angular.min.js"></script> 
    <script src="../Content/telerik/scripts/kendo.all.min.js"></script> 
    <script src="../content/shared/js/console.js"></script> 
    <script> 

    </script> 


</head> 
<body> 

    <a class="offline-button" href="../index.html">Back</a> 

    <div id="example" ng-app="KendoDemos"> 
     <div ng-controller="MyCtrl"> 
      <kendo-grid options="mainGridOptions"></kendo-grid> 
     </div> 
    </div> 
    <script> 
    angular.module("KendoDemos", [ "kendo.directives" ]); 
    function MyCtrl($scope) { 
     $scope.mainGridOptions = { 
      dataSource: { 
       type: "odata-v4", 
       transport: { 
        //read: "http://demos.telerik.com/kendo-ui/service/Northwind.svc/Employees" 
        read: "/odata/people", 
        dataType: "json" 
       }, 
       parameterMap: function (data, operations) { 
        var paramMap = kendo.data.transports.odata.parameterMap(data); 
        if (paramMap.$inlinecount) { 
         if (paramMap.$inlinecount == "allpages") { 
          paramMap.$count = true; 
         } 
         delete paramMap.$inlinecount; 
        } 
        if (paramMap.$take) { 
         paramMap.$top = paramMap.$take; 
         delete paramMap.$take; 
        } 
        if (paramMap.$filter) { 
         paramMap.$filter = paramMap.$filter.replace(/substringof\((.+),(.*?)\)/, "contains($2,$1)"); 
        } 
        return paramMap; 
       }, 
       schema: { 
        data: function (data) { return data.value; }, 
        total: function (data) { return data['@odata.count']; }, 
        model: { 
         id: "Email", 
         fields: { 
          Name: {type: "string"}, 
          Email: {type: "string"}, 
         } 
        } 
       }, 
       pageSize: 5, 
       serverPaging: true, 
       serverSorting: true 
      }, 
      sortable: true, 
      pageable: true, 
      //detailTemplate: kendo.template($("#template").html()), 
      dataBound: function() { 
       this.expandRow(this.tbody.find("tr.k-master-row").first()); 
      }, 
      columns: [ 
       { 
        field: "Name", 
        title: "Name", 
        width: "200px" 
       }, 
       { 
        field: "Email", 
        title: "E-Mail", 
        width: "200px" 
       }, 
      ] 
     }; 
    } 
    </script> 
</body> 
</html> 

В коде используется введенная анонимная функция, которая позволяет определять пользовательские параметры и отображать их.

   parameterMap: function (data, operations) { 
        var paramMap = kendo.data.transports.odata.parameterMap(data); 
        if (paramMap.$inlinecount) { 
         if (paramMap.$inlinecount == "allpages") { 
          paramMap.$count = true; 
         } 
         delete paramMap.$inlinecount; 
        } 
        if (paramMap.$take) { 
         paramMap.$top = paramMap.$take; 
         delete paramMap.$take; 
        } 
        if (paramMap.$filter) { 
         paramMap.$filter = paramMap.$filter.replace(/substringof\((.+),(.*?)\)/, "contains($2,$1)"); 
        } 
        return paramMap; 
       }, 
       schema: { 
        data: function (data) { return data.value; }, 
        total: function (data) { return data['@odata.count']; }, 
        model: { 
         id: "Email", 
         fields: { 
          Name: {type: "string"}, 
          Email: {type: "string"}, 
         } 
        } 
       }, 
       pageSize: 5, 
       serverPaging: true, 
       serverSorting: true 
      }, 

I, после проверки над вещами, и изменить немного здесь и там, как, настройка схемы, а также добавить новые условия (как они были оставлены пустыми на образце кода).

Теперь, что выдается мне, что после запуска моего приложения, я заметил, даже это не касается моей сниппета коды ...

if (paramMap.$take) { 
    paramMap.$top = paramMap.$take; 
    delete paramMap.$take; 
} 

но даже не применяется другими раздел, а также отладчик JavaScript не будет нарушать функцию .... поэтому, например, он не будет добавлять такие параметры, как, count ...

Итак, я пришел сюда, чтобы убедиться, что я иду по правильному пути, и во-вторых, если это правильно, то как это исправить. ..

я также кое-что об изменении вещей в JSON читать, но я предполагаю, что мои данные JSON, так как я не определить любую встроенную строку ...

ответ

1

кендо не поддерживает OData v4 сейчас, так что просто сделать конечно, вы получили правильную версию, и она автоматически обработает URL. , то вы можете избавиться от части в «parameterMap» и изменить «читать» в

read: { 
         url:'/odata/people', 
         dataType: 'json' 


        } 
+0

так вы говорите, что мне нужно обновить кендо? – deadManN

+0

Я не обновлял свою библиотеку, но я предполагаю, что это проблема, поскольку моя библиотека старая, и поскольку odata-v4 возвращает тот же результат, что и любое неизвестное значение, поэтому ваш ответ должен быть правильным (как говорят все остальные это тоже) – deadManN

2

parameterMap должен быть определен на транспортном уровне (см kendo documentation). В коде вы определили параметрMap на уровне dataSource.

Я не уверен, что ваши дополнительные параметры будут отправлены так, как вы хотите, но по крайней мере объясните, почему параметрMap не вызывается.

Вот как это должно быть:

var dataSource = new kendo.data.DataSource({ 
    transport: { 
    read: { 
     url: "http://whatever.com 
    }, 
    parameterMap: function(data, type) { 
     //parameterMap should be a child of the transport object 
     //... 
    } 
    } 
    //<-- You added the parameter map there as a transport sibling. 
}); 
+0

У меня нет доступа к веб-страницам ... так что бы вы добавили образец к этому сообщению и прокомментировали, поэтому я уведомляю – deadManN

+0

Я просто добавил небольшой пример кода –

+0

Ницца это для меня очень много. –

Смежные вопросы