【问题标题】:How do I know what grid called my additionalData function?我怎么知道什么网格调用了我的附加数据函数?
【发布时间】:2014-11-12 16:29:48
【问题描述】:

我正在创建一个门户/仪表板页面,允许用户在屏幕上多次放置相同的“小部件”。小部件可能包含一个 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 传递任何参数来识别是哪个网格/数据源进行了该调用。

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

我还尝试让 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 表达式,而不是在以后的 syncs() 中评估完整函数。

我在想我可能会以某种方式在 javascript 中添加 data() 函数,使用一个剃须刀创建的函数,该函数只是硬编码查询控件(复选框等)的 jQuery 范围,但我看不到这样做的方法.

我怎么知道是什么网格调用了附加数据函数?任何想法或建议表示赞赏。

【问题讨论】:

    标签: kendo-ui kendo-grid


    【解决方案1】:

    数据源可以被多个小部件使用,因此它无法可靠地判断哪些小部件正在使用它。 不过,通过 dataSource 事件来获得它有一些技巧。

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


    我好像没听懂你的问题。

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

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

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

    【讨论】:

    • 我只展示了一个网格的数据源配置。这仍然适用吗?
    • 刷新网格时需要传递附加数据。使用 MVC,这是通过提供一个函数名来完成的。但是,对于剃刀助手,该函数必须位于全局命名空间中。初始化网格后有没有办法附加到附加数据?看起来数据源的数据配置项实际上并不是一个事件。
    • 数据绑定为时已晚,无法添加其他数据。有没有办法在dataBinding事件中设置dataSource的数据值?
    • 听起来像是一个递归调用。如果您需要在渲染之间对数据调用进行操作/添加数据,那么最好的做法是自己处理所有 ajax 调用。 Kendo 并没有真正设置为获取数据,然后对其进行处理,然后进行渲染。每次在 dataSource 中设置数据时(无论是读取还是手动),它都应该重新渲染数据。而不是让 Kendo 处理您的数据的正常策略,完全删除您的数据源。 Kendo 将为您的模型创建一个默认数据源。您可以使用手动 data() 函数添加自己的数据
    • 它根本不是递归的。我想我的问题没有提供足够的信息。
    猜你喜欢
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    相关资源
    最近更新 更多