【问题标题】:kendo ui grid add the record more than oncekendo ui grid 多次添加记录
【发布时间】:2013-06-27 12:14:20
【问题描述】:

我有一个 kendo ui 网格,在更改行事件时,我获取行 ID 并将其传递给另一个加载其他网格的函数。我试图简化操作以找出这样的错误。

HTML 代码

<input type="button" id="load-first" value="Load 108" />    
<input type="button" id="load-second" value="Load 92" />

Javascript

$("#load-first").click(function(){
    loadEmailGrid(108);
});
$("#load-second").click(function(){
    loadEmailGrid(92);
});

  function loadEmailGrid(salesRepsId) {
      dataSource = new kendo.data.DataSource({
          transport: {
              read: {
                  url: "operations/get_emails_sales_reps.php?salesRepsId=" + salesRepsId,
                  type: "GET"
              },
              update: {
                  url: "operations/edit_email.php?salesRepsId=" + salesRepsId,
                  type: "POST",
                  complete: function (e) {
                      $("#email-grid").data("kendoGrid").dataSource.read();
                  }
              },
              destroy: {
                  url: "operations/delete_email.php",
                  type: "POST",
                  complete: function (e) {
                      $("#email-grid").data("kendoGrid").dataSource.read();
                  }
              },
              create: {
                  url: "operations/add_email.php?salesRepsId=" + salesRepsId,
                  type: "POST",
                  complete: function (e) {
                      $("#email-grid").data("kendoGrid").dataSource.read();
                  }
              },
          },
          schema: {
              data: "data",
              total: "data.length", //total amount of records
              model: {
                  id: "EmailId",
                  fields: {
                      EmailType: {
                          defaultValue: {
                              EmailTypeId: 2,
                              EmailTypeName: "Home"
                          }
                      },
                      EmailText: {
                          type: "string"
                      },
                      IsMainEmail: {
                          type: "boolean"
                      },
                  }
              }

          },
          pageSize: 5,
      });
      //dataSource.sync();
      $("#email-grid").kendoGrid({
          dataSource: dataSource,
          height: 250,
          filterable: true,
          sortable: true,
          pageable: true,
          reorderable: false,
          groupable: false,
          batch: true,
          navigatable: true,
          toolbar: ["create", "save", "cancel"],
          editable: true,
          columns: [{
              field: "EmailType",
              title: "Type",
              editor: EmailTypeDropDownEditor,
              template: "#=EmailType.EmailTypeName#",
              filterable: {
                  extra: false,
                  field: "EmailType.EmailTypeName",
                  operators: {
                      string: {
                          startswith: "Starts with",
                          eq: "Is equal to",
                          neq: "Is not equal to"
                      }
                  }
              }
          }, {
              field: "EmailText",
              title: "Email",

          }, {
              field: "IsMainEmail",
              title: "Main?",
              width: 65,
              template: function (e) {
                  if (e.IsMainEmail == true) {
                      return '<img align="center" src ="images/check-icon.png" />';
                  } else {
                      return '';
                  }
              }
              // hidden: true

          }, {
              command: "destroy",
              title: "&nbsp;",
              width: 90
          },

          ]
      });
  }

返回add_email.php的例子

[{"EmailId":200}]

例如,如果我使用一个 id 加载网格,我单击加载 108 按钮。添加操作完美运行。但是当我单击并在两个按钮之间混合时。即加载具有不同ID的网格 add 函数调用了很多次,一个是以前的 id,另一个是单击的按钮 id。按钮之间的混合点击越多,调用的添加函数就越多。

这是显示问题的link

请问,我该如何解决这个问题?我尝试了很多没有运气的事情

【问题讨论】:

    标签: javascript kendo-ui kendo-grid


    【解决方案1】:

    您使用全局变量,因此您混淆了数据源。

    改变

    dataSource = new kendo.data.DataSource({...
    

    var dataSource = new kendo.data.DataSource({...
    

    然后再试一次。

    编辑:

    试试这个作为你的脚本代码。

    http://jsfiddle.net/blackjim/9LHW5

    您要做的主要事情是将网格的初始化与传输选项的更改分开。

    例如:

    function loadDatasourceWithId(salesRepsId){
        var dataSourceOptions = dataSource.options; // find somehow the dataSource options
        dataSourceOptions.transport.read.url = "operations/get_emails_sales_reps.php?salesRepsId="+salesRepsId;
        dataSourceOptions.transport.update.url = "operations/edit_email.php?salesRepsId="+salesRepsId;
        dataSourceOptions.transport.create.url = "operations/add_email.php?salesRepsId="+salesRepsId
    
        datasource.read(); // read again to get new values to your dataSource
    }
    

    【讨论】:

    • 请检查上面的链接,也许你能想到一些东西
    • 我去看看。究竟是什么问题?每次单击按钮似乎都可以很好地替换旧的数据源。你能告诉我如何重现这个问题吗?
    • 使用萤火虫检查,加载 108 网格然后加载加载 92 网格。尝试添加新记录,add函数会被调用两次
    • 试试这个作为你的脚本代码。 jsfiddle.net/blackjim/9LHW5 您要做的主要事情是将网格的初始化与传输选项的更改分开。
    • 非常感谢。我将初始化与更改数据源分开。效果很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2013-09-17
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多