在Kendo Grid上调用JS函数不起作用

时间:2019-01-03 06:55:12

标签: javascript jquery kendo-grid

我有一个Kendo网格,其中包含一些对我的商品的统计列(计数,平均值,百分比等)。当我尝试调用JS函数以显示最多2个小数位并修剪尾随零时,该函数不起作用。

但是,在浏览器控制台上它可以工作,因此当我向JS添加超时功能时,它就可以工作。但是出于几个原因,这不是我想要的解决方案

插图的剑道网格:

@(Html.Kendo().Grid<StatisticsItemsModel>()
    .Name("grid-list")
    .Columns(columns =>
    {
        columns.Bound(t => t.Description).Title("Description").Width(50)
            .ClientTemplate("#if (Description!= null) { if (IsNew == true) { #" + "<div style='text-align:right'>#: Description#</div>" + "# } else { #" + "<div style='text-align:right'><strong>#: Description#</strong></div>" + "# }} #");
        columns.Bound(t => t.Count).Width(100).Title("Count").HtmlAttributes(new { style = "text-align:right" });
        columns.Bound(t => t.Percent).Width(100).Title("Percent").Format("{0:##.## %}").HtmlAttributes(new { style = "text-align:right" });
        columns.Bound(t => t.Average).Width(100).Title("Average").Format("{0:n2}").HtmlAttributes(new { style = "text-align:right", @class = "StatisticAverage" });
    })
    .DataSource(dataBinding => dataBinding
        .Ajax()
        .ServerOperation(true)
        .Read(read => read.Action("DataGridStatistics", "Filter", new { id = Model.Id })
    )
    )
)

当前具有超时功能的JS函数:

$(document).ready(
    function () {
        window.setTimeout(function () {
            $(".StatisticAverage").each(function (i, obj) {
                if ($(this).text() != "") {
                    var textVal = $(this).text().replace(",", ".");
                    var numberVal = parseFloat(textVal);
                    r = (+numberVal).toFixed(2).replace(/([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)/, '$1');
                    $(this).text(r);
                }
            })
        }, 2000)
    });

有什么想法可以在没有超时功能的情况下使其正常工作吗?如何确保仅在Kendo Grid完全加载时执行JS函数? 谢谢

1 个答案:

答案 0 :(得分:0)

尝试使用dataBound事件(而不是超时)。来自dataSource的数据绑定到网格后将触发此事件。

dataBound

代码示例:

Html.Kendo().Grid<StatisticsItemsModel>()
  .Name("grid-list")
  .Events(e => e.DataBound("onDataBound"))
  .Columns....


function onDataBound() {
        // handle the data change event here...
    }