2

主要问题

我当前的问题是更新网格数据源时的刷新进度。当 requestStart 事件开始时,我已经更改了我的代码使用kendo.ui.progress的方式,我将 kendo.ui.progress 设置为 true。这会在加载图像结束时激活它调用 requestEnd。

问题是这个事件发生在排序和过滤上。我希望它只触发数据源的读取功能。这个问题使得网格使用进度无休止。

是否有某种方法可以过滤requestStartrequestEnd仅在传输读取时激活?

我的数据源代码

dataSource = new kendo.data.DataSource({
  transport: {
    read: {
      url: url_Obtener_Periodo,
      type: "POST"
    },
    parameterMap: function (options, operation) {
      if (operation == "read" && options) {
        return {
          "periodo.Year": $("#periodo-anio").val(),
          "periodo.Month": $("#periodo-mes").val(),
          "Filtro": $("#Filtro").val()
        };
      }
    }
  },
  requestStart: function (e) {
    kendo.ui.progress($("#grid-container"), true);
  },
  requestEnd: function (e) {
    kendo.ui.progress($("#grid-container"), false);
  },
  schema:{
    model: {
      id: "Codigo_De_Pedido",
      fields: {
        Codigo_De_Pedido: { type: "number" },
        Fecha_Y_Hora_De_Creacion: { type: "date" },
        UserName: { type: "string" },
        Nombre_Del_Usuario: { type: "string" },
        Codigo_Del_Vendedor: { type: "number" },
        Nombre_Del_Vendedor: { type: "string" },
        Is_Pedido_Closed: { type: "bool" },
        Estado: { type: "string" }
      }
    }
  },
  pageSize: 10
});
4

2 回答 2

0

对于阅读本文的人,您的问题有几点值得一提:

有什么方法可以过滤 requestStart 和 requestEnd 只在传输读取时激活?

是的,但它不会帮助你。事件的参数有一个type包含readupdatedestroy的属性create

 statementEntriesDS.bind("requestStart", function (e) {     
                switch (e.type) {
                    case "create":
                        alert('-> event, type "create".');
                        break;
                    case "read":
                        alert('-> event, type "read".');
                        break;
                    case "update":
                        alert('-> event, type "update".');
                        break;
                    case "destroy":
                        alert('-> event, type "destroy".');
                        break;
                }
            });

您的示例代码未指定 serverFiltering 或 serverSorting,因此排序和过滤不会导致远程操作。您只会获得客户端排序和过滤。但是,如果指定了它们,它们都将导致 aread并且这不会真正帮助您。

你不会让requestEnd事件触发听起来很奇怪。您可能应该为该error事件添加一个处理程序并查看是否有故障。

如果您真的想完全控制正在发生的事情,您可以为您指定一个函数read

transport: {
                read: function (options) {
                    kendo.ui.progress($gridContainer, true);
                    $.ajax({
                        url: carrierServiceBaseUrl + "/GetManualStatementsCarrierList",
                        contentType: 'application/json; charset=utf-8',
                        dataType: "json",
                        type: "POST",
                        success: function (result) {
                            // notify the data source that the request succeeded
                            options.success(result);
                            kendo.ui.progress($gridContainer, false);                            },
                        error: function (result) {
                            options.error(result); // Call the DataSource's "error" method with the results
                            kendo.ui.progress($gridContainer, false);
                            notification.show({
                                title: "ERROR:",
                                message: result.statusText
                            }, "error");
                        }
                    });
                }
            }
于 2015-01-25T14:00:49.333 回答
0

我为解决无休止的进度问题所做的更改 2.

  • 从数据源中删除 requestEnd 函数
  • 将 dataBound 函数添加到 Grid

数据源代码

dataSource = new kendo.data.DataSource({
  transport: {
    read: {
      url: url_Obtener_Periodo,
      type: "POST"
    },
    parameterMap: function (options, operation) {
      if (operation == "read" && options) {
        return {
          "periodo.Year": $("#periodo-anio").val(),
          "periodo.Month": $("#periodo-mes").val(),
          "Filtro": $("#Filtro").val()
        };
      }
    }
  },
  schema:{
    model: {
      id: "Codigo_De_Pedido",
      fields: {
        Codigo_De_Pedido: { type: "number" },
        Fecha_Y_Hora_De_Creacion: { type: "date" },
        UserName: { type: "string" },
        Nombre_Del_Usuario: { type: "string" },
        Codigo_Del_Vendedor: { type: "number" },
        Nombre_Del_Vendedor: { type: "string" },
        Is_Pedido_Closed: { type: "bool" },
        Estado: { type: "string" }
      }
    }
  },
  pageSize: 10,
  requestStart: function (e) {
    kendo.ui.progress($("#grid-container"), true);
  }
});

剑道网格代码

kendoGrid = $("#selectable-pedidos").kendoGrid({
  dataSource: dataSource,
  pageable: true,
  sortable: true,
  filterable: {
    extra: false,
    operators: {
      string: {
        startswith: "Comienza Con",
        eq: "Es Igual A",
        neq: "No Es Igual A"
      }
    }
  },
  dataBound: function (e) {
    kendo.ui.progress($("#grid-container"), false);
  },
  columns: [
    { field: "Fecha_Y_Hora_De_Creacion", title: "Fecha y Hora", template: "#= kendo.toString(Fecha_Y_Hora_De_Creacion, 'dd/MM/yyyy hh:mm:ss tt') #" },
    { field: "Codigo_De_Pedido", title: "Código de Pedido" },
    { field: "Estado", filterable: true, title: "Estado" },
    { field: "Codigo_Del_Vendedor", title: "Código de Vendedor" },
    { field: "Nombre_Del_Vendedor", title: "Nombre de Vendedor" },
    {
      command: {
        text: "Ver Detalle de Pedido",
        click: function (e) {
          $("#empty").append("<form method='POST' action='/HojaDeRuta/GetById/'><input type='hidden' name='Codigo_Pedido' value='"
                            + this.dataItem($(e.currentTarget).closest("tr")).Codigo_De_Pedido + "' /><input type='submit' /></form>");
          $("#empty input[type='submit']").click();
        }
      },
      title: " " 
    }
  ]
}).data("kendoGrid");
于 2013-06-14T15:45:24.283 回答