代码之家  ›  专栏  ›  技术社区  ›  firienn

ASP中的剑道网格。Net MVC:防止刷新网格上的数据。设置选项

  •  0
  • firienn  · 技术社区  · 7 年前

    在我的项目中,我想根据屏幕大小更改网格的过滤器类型。对于大屏幕,我使用 GridFilterMode.Row 对于我想使用的移动设备 GridFilterMode.Menu ( .Mobile(MobileMode.Phone) 在这个项目中工作不正常,结果非常糟糕)。

    所以我试着处理 $(window).resize 事件为我的网格设置正确的过滤器类型。以下是我的功能:

    $(window).resize(function () {
    
        var windowSize = $(window).innerWidth();
        var filterMode = "";
    
        if (windowSize >= 960) {
            filterMode = "row";
            loadTemplate(filterMode);
    
        } else if (windowSize < 960) {
            filterMode = "menu";
            loadTemplate(filterMode);
        }
    
    });
    
    function loadTemplate(filterModeType) {
        var grid = $("#messagesGrid").data("kendoGrid");
        var options = grid.getOptions();
    
        if (options) {
            options.filterable = { "mode": filterModeType }
            options.toolbar = [
                {
                    template: $("#toolbarTemplate").html()
                }
            ];
    
            grid.setOptions(options);
        }
    }
    

    一切正常。 但是当我打电话的时候 grid.setOptions() 它会刷新网格数据源,并在每次更改窗口大小时向服务器发出新的请求。所以,如果我调整窗口大小10次,我会收到10个请求!

    有人知道如何防止这种情况吗?

    以防万一-我的 Kendo().Grid 数据源部件

    .DataSource(dataSource => dataSource.Ajax()
      .Read(read => read.Action("FilterTypeGrid", "Project"))
      .PageSize(20)
      .Sort(sort => sort.Add(t => t.Date).Descending())
      .ServerOperation(true)
      .AutoSync(true)
      .Model(model =>
      {
          model.Id("Key");
          model.Field(a => a.Key).Editable(false);
          model.Field(a => a.Text).Editable(false);
          model.Field(a => a.Date).Editable(false);
          model.Field(a => a.Name).Editable(true);
          model.Field(a => a.Selected).Editable(true);
      }))
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   LukLed    7 年前

    根据文件 here :

    调用setOptions时,网格小部件将被销毁 重新创建。如果小部件绑定到远程数据,则会发出新的读取请求 将制作。

    剑道网格是一个非常复杂的野兽,所以在更改选项后需要重建。一种解决方案是禁用自动数据绑定并提供自己的机制,或者只是实现缓存。但你为什么在乎?谁在运行时更改屏幕大小?这是一个边缘问题,不值得花时间来解决。视口大小主要发生在手机或平板电脑旋转时,但一次数据重新加载肯定不是问题。