【问题标题】:How do I attach function to kendo grid after it initialized?初始化后如何将功能附加到剑道网格?
【发布时间】:2015-08-24 13:59:41
【问题描述】:

我有一个 Kendo Grid,我有 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?


})

【问题讨论】:

标签: javascript jquery kendo-ui kendo-grid kendo-datasource


【解决方案1】:

您应该从准备好的文档中移出函数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 中提出类似问题

【讨论】:

  • 我们的设计模式是将所有 javascript 放入单独的 .js 文件中。没有页内 javascript。这就是为什么我想在 .JS 文件中附加该函数...另外请注意,页面底部引用了 .js 文件,这意味着在所有元素都初始化之后。这样它就可以引用 Grid。
  • 那你能把js文件本身的document ready函数中的函数移出吗?
  • 技术上我可以(这就是我目前的工作方式),但这又不是我们的设计模式。我们所有的函数都是作用域函数,并尽量避免使用任何全局函数。此外,如果我将该函数作为全局函数,这意味着它使用的所有私有变量我也必须使它们成为全局变量。正如我原来的问题中提到的,我想避免让它成为全球性的。
  • 我只是想知道网格初始化后有没有办法分配函数?
【解决方案2】:

我找到了答案,这可能对其他人有所帮助。在这里,您如何在准备好的文档中附加功能

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

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

  grid.dataSource.read();

【讨论】:

    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    相关资源
    最近更新 更多