[英]Kendo UI ASP.NET MVC - How to apply loading mask on every grid instead of their content?
我开始使用Kendo UI for ASP.NET MVC ,我的版本是2014.3.1119 。
当前,当我在应用程序中刷新网格时,将加载蒙版叠加层(具有class="k-loading-mask"
属性的<div>
元素)应用于网格的<div class="k-grid-content">
元件。
因此,当网格开始刷新时, 遮罩仅覆盖可见的单元格 (遮罩的上方和下方,遮罩结束且所有内容均处于活动状态,因此,如果我连续有一个链接,则该链接可单击且起作用)。
此外,掩码不会到达列标题或包含用于处理分页的按钮的栏。
如果刷新时间越长,看到此行为的机会就越大,它适用于我在应用程序中使用的每个网格。
在Kendo UI Grid官方演示页面上,您可以测试此行为(如果真的很:P),这表明这是此小部件的默认行为。
在我的情况下,控制它的脚本是Kendo UI软件包中的kendo.all.min.js
文件,该文件将应用在整个应用程序中。
这种方法的问题在于,我想在网格中使用许多指向SQL查询(小型和大型查询)的链接。
如果在刷新过程中用户能够使用我的网格的任何部分,它将导致应用程序执行
我尝试将这个加载蒙版放置到具有class="k-grid"
属性的主网格的<div>
元素外部(在开发控制台中用裸手;它应该只是网格的第一个子元素)元素),它覆盖了网格的每个部分; 在这种状态下,网格绝对无法单击或滚动,这对我而言是最佳行为。
您可以在此JSFiddle示例页面上看到使用内联脚本创建的有关这种方法的示例 。
当然,在我的视图的.cshtml
文件中,我的第一种方法是执行此操作…… 但是它没有任何改变。
我认为(也许我错了)导入到应用程序每个页面中的主脚本会覆盖我在页面文件中创建的功能。
但是我认为最好的解决方案是,如果我可以更改kendo.all.min.js
主文件中的某些内容(以某种方式)以将覆盖层放置在主网格元素内,而不是每次使用k-grid-content
类网格已刷新。
你们中的某人可以给我建议如何在应用程序中的任何地方创建这种网格覆盖吗?
甚至不更改我的主JS文件是否有可能? 如果是,该如何修改该文件?
(并不是为了保护自己不受任何伤害,但是我是ASP.NET和JS的初学者,伙计们……只知道...
是的,您可以通过覆盖网格的“内部” _progress()方法来覆盖网格应用加载掩码时的操作。 是否推荐使用该技术还是有争议的,因为它涉及更改“非公开”方法,这意味着Telerik可以在不发出警告的情况下对其进行更改,并导致您的替代项破坏事情。
无论如何,这是可以实现目标的方法。
在您自己的JS代码中的某个位置(也许每个页面上都有一个Utility.js文件),添加自己的Grid _progress()方法实现,该方法确定要掩盖如何确定元素的元素,即:
kendo.ui.Grid.prototype._progress = function (toggle) {
var element = this.element;
// Here is where out-of-the-box Kendo figures out what element of the grid to mask.
// But we don't care and want to mask the entire grid, which is this.element.
kendo.ui.progress(element, toggle);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.