我怎么知道什么网格称为我的additionalData函数?

时间:2014-11-12 16:29:48

标签: kendo-ui kendo-grid

我正在创建一个门户/仪表板页面,允许用户在屏幕上多次放置相同的“小部件”。小部件可能包含kendoUI网格。此外,窗口小部件可能包含其他控件,例如刷新网格时所需的复选框。但是,由于页面上有多个相同窗口小部件的实例,因此需要为其他数据调用相同的功能。

我正在使用MVC助手来创建网格,例如:

    .DataSource(dataSource => dataSource
                    .Ajax()
                    .PageSize(100)
                    .Batch(true)
                    .ServerOperation(false) //client side sort 
                    .Read(read => read.Action("AjaxGridRead", "TodaysTransferSnapin").Data("IncludeFutureTransfer("+ViewBag.snapinId+")"))
                    .Sort(sort => sort.Add(m => m.Bldg).Ascending())
                )

但是,似乎没有任何参数传递给TodaysTrasnferSnapin来识别哪个网格/数据源进行了该调用。

我试图传递gridname(即使有多个实例,它在页面上也是唯一的)但是,导致函数运行,现在返回值只是一个静态对象。

我还尝试让TodaysTransforSnapin使用闭包来返回一个函数来存储传递的值,如下所示:

   function IncludeFutureTransfer(snapinid) {
        return function() {
            var snapin$ = $(".widget[data-snapin-id='" + snapinid + "']");
            //this function is called/used by the "read" action of the kendo grid for todays Transfers. 
            return {
                IncludeFuture: $("#cbFutureTransfer", snapin$).is(":checked"),
                snapinId: snapinid
            }
        };

这似乎适用于初始网格绑定,但在此之后,它再次出错。它不会调用函数,但似乎尝试在返回时评估jQuery表达式而不是后续同步()中的完整函数。

我以为我可以在某种程度上使用razor创建的函数在javascript中添加data()函数,该函数只是硬编码查询控件的jQuery范围(复选框等),但我没有看到这样做的方法

我如何知道哪个网格正在调用附加数据功能?任何想法或建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

数据源可以被多个小部件使用,因此它无法可靠地分辨哪些小部件正在使用它。 但是,通过dataSource事件可以解决这个问题。

尝试绑定到其中一个dataSource事件,并按照本文中的更新答案进行操作。 Get a reference to Kendo Grid from inside the error handler


我似乎错过了解你的问题。

为什么不能绑定到每个网格的数据绑定事件?当您通过dataSource读取或手动将数据绑定到dataSource时,将调用数据绑定事件。 http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#events-dataBound

任何Grid事件的事件处理程序中的this关键字都应设置为窗口小部件实例。

dataSource的事件将仅包含对dataSource的引用。正如我之前所说,没有真正的方法从dataSource获取小部件。上面列出的方法需要唯一的dataSources。