Вот упрощенный пример моих данных:
[{"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);
}
}
Это действительно плохо.
- Доступ к
kendoChart
возвращает неопределенное значение, но сама диаграмма назвала это. Вот почему мне нужно проверить if (chart)
выше. - Это приводит к хакерскому блоку ELSE, который я добавил, где я могу вызвать его снова с задержкой 500 мс. Это само по себе является ошибкой, поскольку 500 мс является случайным числом и может быть недостаточно. Я не могу отправить так.
- Чтобы предотвратить рекурсию, я вызываю ту же функцию с другим параметром.
- Если значения найдены, тогда я не могу просто установить параметры диаграммы. Мне нужно позвонить
refresh
, который переадресовывает aws все.
Вопросы:
- Почему данные kendoChart изначально не определены? Почему Telerik позвонил
dataBound
, когда там ничего нет?! - Нет события
dataBinding
? Я не хочу делать это после факта, и при этом я не хочу переосмыслить sh все это.