我有一个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函数? 谢谢
答案 0 :(得分:0)
尝试使用dataBound
事件(而不是超时)。来自dataSource
的数据绑定到网格后将触发此事件。
代码示例:
Html.Kendo().Grid<StatisticsItemsModel>()
.Name("grid-list")
.Events(e => e.DataBound("onDataBound"))
.Columns....
function onDataBound() {
// handle the data change event here...
}