能否为Kendo UI柱状图的data元素传递自定义数据获取函数?
关于Kendo UI柱状图通过函数传递数据的问题解答
嘿,我来帮你梳理下这个问题~首先得指出你当前写法里的核心问题:你定义的GetFundPerfCalendSP函数里嵌套了$(document).ready(),而且没有返回任何数据,Kendo UI图表的data属性需要的是直接的数据集合(比如数组),或者能同步返回数据的函数,但你的函数执行后其实是undefined,而且里面的异步逻辑(ready回调)也没法给图表提供数据。
下面给你两种可行的解决方案,适配你从ASP.NET MVC Action获取JSON数据的场景:
方案一:先异步获取数据,再初始化图表
这种方式先通过AJAX请求拿到数据,再用拿到的数据初始化Kendo图表,逻辑清晰直接:
// 封装获取数据的函数,返回AJAX Promise function GetFundPerfCalendSP() { var value = $("#idProduitSP").text(); return $.ajax({ url: '/YourController/YourFundDataAction', // 替换成你的MVC Action地址 type: 'GET', data: { produitId: value }, // 传递页面上的参数到Action dataType: 'json' }); } // 在DOM加载完成后,先拿数据再渲染图表 $(document).ready(function() { GetFundPerfCalendSP() .done(function(fundData) { // 假设fundData是符合Kendo要求的数组,比如[{value: 15}, {value: 22}, ...] $("#yourChartId").kendoChart({ series: [{ name: "Oddo Avenir Euro CI-EUR", data: fundData, border: { width: 0 } }], // 补充其他图表配置,比如坐标轴、标题等 title: { text: "基金业绩" }, categoryAxis: { categories: ["Jan", "Feb", "Mar"] } }); }) .fail(function() { console.error('获取基金数据失败,请检查请求地址或参数'); }); });
方案二:使用Kendo UI DataSource(更推荐)
Kendo自带的DataSource专门用来处理远程数据,支持自动加载、数据格式化、状态管理等功能,比手动写AJAX更省心:
$(document).ready(function() { var produitValue = $("#idProduitSP").text(); $("#yourChartId").kendoChart({ // 配置DataSource从MVC Action拉取数据 dataSource: { transport: { read: { url: '/YourController/YourFundDataAction', type: 'GET', data: { produitId: produitValue }, dataType: 'json' } }, // 如果你的Action返回的是带包装的JSON(比如{ Data: [...], Total: 10 }),可以用schema提取数据 schema: { data: function(response) { return response.Data; // 替换成你实际的数组字段名 // 如果Action直接返回数组,就写 return response; } } }, series: [{ name: "Oddo Avenir Euro CI-EUR", field: 'value', // 替换成你JSON数据里的数值字段名 border: { width: 0 } }], // 其他图表配置 title: { text: "基金月度业绩" }, categoryAxis: { field: 'month' } // 如果数据里有分类字段,直接绑定 }); });
额外说明
如果一定要给data传递函数,这个函数必须同步返回数据,但你的场景是从服务器异步获取数据,同步函数根本等不到返回结果,所以这种方式不适用。上面两种异步方案才是正确的选择,尤其是第二种用Kendo DataSource的方式,更贴合Kendo的设计理念。
内容的提问来源于stack exchange,提问作者Haytham
相关产品推荐
相关产品推荐

