初始化后如何将函数附加到 kendo 网格?

How do I attach function to kendo grid after it initialized?

我有一个 Kendo 网格和 JavaScript 函数“getFilters”。 “getFilters”函数是在文档中定义的作用域函数。目前网格正在调用“getFilters”,如下所示。但这不起作用,因为“getFilters”在网格初始化后被初始化。所以我收到错误 0x800a1391 - JavaScript 运行时错误:'getFilters' 未定义

我不想让“getFilters”函数成为全局函数。 那么如何在初始化网格后将“getFilters”附加到数据源?我想在 Document Ready

中这样做
@(Html.Kendo().Grid<MyModel>()
    .Name("Grid")                    
        col.Bound(p => p.State).Title("State");            
        col.Bound(p => p.BatchStatus).Title("Status");
    })
    .AutoBind(false)
    .Pageable()
    .Sortable()                
    .DataSource(dataSource => dataSource
        .Ajax()                    
        .Read(read => read
            .Action("GetData", "MyController")
            .Data("getFilters"))
        .ServerOperation(false))
)

JavaScript 文档准备功能

$(function () {

  function getFilters() {
    return SomeJSON;
  }


  var ds = $("#Grid").data("kendoGrid").dataSource;

      //How do i attach getFilters function to dataSource here?


})

您应该从准备好的文档中移出函数 getFilters 并将其放在网格初始化部分上方或下方的脚本标记中

<script>
function getFilters() {
    return SomeJSON;
  }
</script>


@(Html.Kendo().Grid<MyModel>()
    .Name("Grid")                    
        col.Bound(p => p.State).Title("State");            
        col.Bound(p => p.BatchStatus).Title("Status");
    })
    .AutoBind(false)
    .Pageable()
    .Sortable()                
    .DataSource(dataSource => dataSource
        .Ajax()                    
        .Read(read => read
            .Action("GetData", "MyController")
            .Data("getFilters"))
        .ServerOperation(false))
)

refer here 在 SO

中提出类似问题

我找到了答案,这可能对其他人有帮助。在这里你可以如何在文档中附加函数 ready

  var grid = $("#grid").data("kendoGrid");
  grid.dataSource.transport.options.read.data = getFilters;

然后调用 read() 重新加载网格。每次调用 read() 时,都会执行附加函数 "getFilters"。

  grid.dataSource.read();