首页 > 解决方案 > 通过模型定义剑道网格

问题描述

对于我要添加的功能,我在同一页面上使用了几个不同的网格。所有这些网格都应该能够影响“删除”、“编辑”和“创建”按钮执行的代码。

为了分隔网格,我可以使用它们的名称,但这对于子网格来说是相当有问题的。我目前使用的代码如下:

function deleteButton()
   switch(selectedGrid) {
      case $("#GridA").data("kendoGrid"):
         log("A"); break;
      case $("#GridB").data("kendoGrid"):
         log("B"); break;
   }

selectedGrid 存储了一个网格,该网格应确定要执行的函数。从这个网格中,我更愿意提取模型(名称)并将其用作 switchcase 变量。结果看起来像这样:

function deleteButton()
  switch(selectedGrid.Model) {
      case 'modelA':
         log("A"); break;
      case 'modelB':
         log("B"); break;
   }

目前我使用日志而不是函数,但想法是一样的。我选择这种方法的原因是因为多个网格使用相同的模型并且应该调用相同的案例。

剑道网格中用于调用函数以设置 selectedGrid 变量的代码:

.Event(event => event.Change("function(){onRowSelectGrid('grid', 'model');}"))

页面 js 中用于设置 selectedGrid 变量的代码:

function onRowSelectGrid(datagrid, model) {
   if (typeof (selectedGrid) !== 'undefined' && selectedGrid !== $("#" + datagrid).data("kendoGrid")) {
      //Remove rowselection from the previous grid
      selectedGrid.select().removeClass("k-state-selected");
   }
   var grid = $("#" + datagrid).data("kendoGrid");
   selectedGrid = grid;
}

我知道这不是您每天的情况,所以如果唯一的解决方案是为每个网格设置单独的按钮,我会理解的。但是,我个人更喜欢所有网格都可以使用的动态代码。

如果有任何问题或需要更多解释,请告诉我。如果有办法以某种方式使用名称(包括子网格的名称),我肯定想看看这样的解决方案。

标签: asp.net-mvctelerikkendo-grid

解决方案


好的,所以这可能不是最好的解决方案,但它确实有效。我所做的是在保存选定网格的代码中添加一些内容。

selectedGrid = grid;

通过向变量添加“模型”来指示网格的模型:

selectedGrid.model= model;

这样,当从按钮调用网格时,我可以调用模型变量来指示应该使用什么方法。

function deleteButton()
  switch(selectedGrid.model) {
      case 'modelA':
         log("A"); break;
      case 'modelB':
         log("B"); break;
   }

希望这可以帮助遇到同样问题的任何人。


推荐阅读