剑道UI ASP.NET MVC - 如何在每个网格上应用加载蒙版而不是其内容?



我开始使用Kendo UI进行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查询(小型和大型查询)的链接。

如果用户能够在刷新过程中使用我的网格的任何部分进行操作,则会导致应用程序

  • 放慢速度或
  • 做这样的操作,可能会导致很大的混乱......

我试图将这个加载掩码放在外面,到主网格的<div>元素上,class="k-grid"属性(徒手,在开发控制台中;它应该只是网格元素的第一个子元素),它覆盖了网格的每个部分; 在这种状态下,网格绝对无法单击或滚动, 对于我的目的来说,这将是最好的行为。

您可以在此 JSFiddle 示例页上看到此方法的示例,该示例页是使用内联脚本创建的。

当然,我的第一个方法是在我的视图.cshtml文件中做同样的事情......但它并没有改变任何东西。

我认为(也许我错了)在我的应用程序的每个页面中导入的主脚本覆盖了我在页面文件中创建的函数。

但是,我认为最好的解决方案是,如果我可以在主kendo.all.min.js文件中更改某些内容(以某种方式)以将覆盖层放置在主网格元素中,而不是每次刷新网格时都具有k-grid-content类的元素。

你们中的某个人可以给我建议如何在应用程序中的任何地方创建这种网格覆盖吗?

甚至可以不更改我的主 JS 文件吗?如果是,我应该如何修改此文件?

(不是为了保护自己免受任何事情的伤害,但我是 ASP.NET 和 JS 的初学者,伙计们......只是要知道... :D)

是的,您可以通过覆盖网格的"内部"_progress() 方法来覆盖网格在应用加载掩码时所做的操作。 它是否是一种推荐的技术是有争议的,因为它涉及更改"非公共"方法,这意味着 Telerik 可以在没有警告的情况下更改它并导致您的覆盖破坏事物。

无论如何,这是您实现目标的方法。

在你自己的JS代码的某个地方(也许你有一个实用程序.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);
}

示例:http://dojo.telerik.com/@Stephen/uGUpas

相关内容

最新更新