2015-07-07 3 views
0

Когда некоторое внешнее событие срабатывает мне нужно обновить диаграмму источника данных вручную вызова:кендо Гистограмма чтения никогда contatct сервер (кэш отключен)

$(".k-chart").data("kendoChart").dataSource.read(); 

Everytime я называю читать, DataSource requestEnd называется, но, obiviously нет ответ доступен для объекта обработчика события.

Я не вижу никакой ошибки, но веб-сервис, указанный в datasource.transport.read.url, никогда не достигается после первого запроса.

Диаграмма загрузки данных по серверу только первый раз, вот конфигурация:

   $scope.chartopts = { 
       charArea: { 
        height: 500, 
       }, 
       title: { 
        position: "bottom", 
        text: "A/B" 
       }, 
       legend: { 
        position: "top", 
        visible: true 
       }, 
       chartArea: { 
        background: "transparent" 
       }, 
       seriesDefaults: { 
        labels: { 
         visible: true, 
         background: "transparent", 
         template: "#= category #: (#= value #)", 
         align: "alignColumn" 
        } 
       }, 
       series: [{ 
        startAngle: 180, 
        categoryField: 'category', 
        field: 'value', 
        padding: 0 
       }], 
       dataSource: { 
        transport: { 
         read: { 
          url: wsurl, 
          type: 'POST', 
          data: {id: id}, 
          dataType: 'json', 
          cache: false, 
         } 
        }, 
        requestEnd: function(e){ 

         if(e.type == 'read' && e.response){//works only the first time 
          var rsp = []; 
          var a = e.response.a; 
          var b = e.response.b; 
          var tot = a + b; 
          if(tot!=0){ 
           var pa = parseFloat(100 * a/tot).toFixed(2); 
           var pb = parseFloat(100 * b/tot).toFixed(2); 
          } 
          else { 
           pa = 0; 
           pb = 0; 
          } 
          rsp = [{ 
           category: "A", 
           value: a, 
           color: "#66FF99", 
          },{ 
           category: "B", 
           value: b, 
           color: "#FF9900", 
          }]; 

          this.data(rsp); 
         } 
        } 
       }, 
       tooltip: { 
        visible: true, 
       }, 
       valueAxis: { 
        majorGridLines: { 
         visible: false 
        }, 
        visible: false 
       }, 
       categoryAxis: { 
        majorGridLines: { 
         visible: false 
        }, 
        line: { 
         visible: false 
        } 
       } 
      }; 

Вот тег:

<div kendo-chart k-options='chartopts' ></div> 

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

ответ

0

Исправлено определение свойства схемы в объекте конфигурации источника данных и адаптация/перемещение всей логики от метода requestEnd к schema.parse.

 dataSource: { 
       transport: { 
        read: { 
         url: wsurl, 
         type: 'POST', 
         data: {id: id}, 
         dataType: 'json', 
         cache: false, 
        } 
       }, 
       schema: { 
        data: 'results', 
        total: 'total', 
        parse: function(data){ 
         var rsp = []; 
         var a = data.a; 
         var b = data.b; 
         var tot = a + b; 
         if(tot!=0){ 
          var pa = parseFloat(100 * a/tot).toFixed(2); 
          var pb = parseFloat(100 * b/tot).toFixed(2); 
         } 
         else { 
          pa = 0; 
          pb = 0; 
         } 
         rsp = {results: [{ 
          category: "A", 
          value: a, 
          color: "#66FF99", 
         },{ 
          category: "B", 
          value: b, 
          color: "#FF9900", 
         }], total: 2}; 

         return rsp; 

        } 
       } 
      } 

Everytime Мне нужно запустить datasource.read(), я также обновить диаграмму:

var chart = $(".k-chart").data("kendoChart"); 
chart.dataSource.read(); 
chart.refresh();