我正在创建一个门户/仪表板页面,允许用户在屏幕上多次放置相同的“小部件”。小部件可能包含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范围(复选框等),但我没有看到这样做的方法
我如何知道哪个网格正在调用附加数据功能?任何想法或建议表示赞赏。
答案 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。