KendoUI для jQuery - событие dataBound диаграммы не работает - PullRequest
0 голосов
/ 17 марта 2020

Вот упрощенный пример моих данных:

[{"Name": "Bob", "Count":3}, {"Name": "Steve", "Count":5}]

Мне нужен заголовок диаграммы: Total FOO: 8. Таким образом, название должно быть основано на данных. Данные AJAX, и это ASP. MVC приложение.

В моем CS HTML у меня есть:

.DataSource(ds => ds.Read(read => read.Action("MeMethodName", "MyControllerName")))
.Events(events => events.DataBound("setChartTitle('chartName', 'Total FOO')"))

Вот сумасшедший хак, который мне пришлось do:

   function setChartTitle(name, title) {
      let chart = $("#" + name).data("kendoChart");
      if (chart) {
         let ds = chart.dataSource;
         let total = 0;
         for (let i = 0; i < ds.data().length; i++) {
            total += ds.data()[i].Count;
         }

         chart.options.title.text = title + ": " + total;
         chart.refresh();
      } else if (arguments.length < 3) {
         // Data source was not found and this was initiated through Kendo. Wait and try again but only once
         setTimeout(function () {
            sumEntityCount(name, title, "stop");
         }, 500);
      }
   }

Это действительно плохо.

  1. Доступ к kendoChart возвращает неопределенное значение, но сама диаграмма назвала это. Вот почему мне нужно проверить if (chart) выше.
  2. Это приводит к хакерскому блоку ELSE, который я добавил, где я могу вызвать его снова с задержкой 500 мс. Это само по себе является ошибкой, поскольку 500 мс является случайным числом и может быть недостаточно. Я не могу отправить так.
  3. Чтобы предотвратить рекурсию, я вызываю ту же функцию с другим параметром.
  4. Если значения найдены, тогда я не могу просто установить параметры диаграммы. Мне нужно позвонить refresh, который переадресовывает aws все.

Вопросы:

  1. Почему данные kendoChart изначально не определены? Почему Telerik позвонил dataBound, когда там ничего нет?!
  2. Нет события dataBinding? Я не хочу делать это после факта, и при этом я не хочу переосмыслить sh все это.

1 Ответ

0 голосов
/ 18 марта 2020

Сама диаграмма передается, когда вы объявляете базовую c функцию без ее вызова:

.events(events => events.Render("someFunction"))

Затем объявляете вашу функцию:

function someFunction(sender) {
   // sender.chart is what I want
}

Но вы не можете передать любую аргументы здесь. Это означает, что я не могу его использовать.

Хак должен сделать следующее:

.Events(events => events.Render("function(sender) { someFunction(sender, 'param1', 'param2', 'param3'); }"))

Это дает ему реальную функцию вместо вызова функции. Kendo передает отправителю, как и ожидалось, и вы можете передать его вместе с новыми параметрами в JavaScript.

Я также переключился на использование Render вместо DataBound.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...