Kendo ui grid使用工具栏中的自定义上传按钮复制记录

时间:2016-01-31 16:00:21

标签: kendo-ui kendo-grid

我知道这个问题已被发布了几次,除非找到我在网格上的行为的答案,否则我没有做任何其他事情...问题是,创建方法被称为倍数插入第一个后的时间......所以第一个插入好,第二个重复两次,依此类推:

我的网格上有一个带有两个按钮的内联网格,第一个按钮正常插入,第二个按钮在kendoWindow中调用它(下面):

<div id="fileUploadWindow">
<form id="fileUploadForm" enctype="multipart/form-data" action="ficheiro.php" method="post">
  <input style="font-family: roboto;" type="file" id="file" name="file">
  <p id="fileUploadFormResult" style="font-family:Roboto;font-size:13px;float:left;margin-top: 15px;"></p>
  <button style="display: block;margin-left: 230px;margin-top: 10px;border: solid;border-width: 1px;padding-left: 10px;background: transparent;border-color: #FF9300;font-size: 13px;font-family: roboto;padding-right: 10px;" id="idBtnEnviarFicheiro" name="nameBtnEnviarFicheiro" type="submit">Enviar</button>
</form>
</div>

这只是一个带有输入类型文件的简单表单,为了调用它,我有这个方法:

$(".k-grid-popup", ent.element).on("click", function () 
  { 
    $("#fileUploadWindow").kendoWindow({
     actions: ["Close"],
     draggable: true,
     width: "300px",
     height: "65px",
     modal: true,
     resizable: false,
     title: "Inserir Ficheiro",
     visible: false,
     close:function()
     {

     }
    }).data("kendoWindow").center().open();

    $('#fileUploadForm').on('submit',(function() 
    {
      var formData = new FormData($(this)[0]);
      ficheiroVal = $("#file").val().split('\\').pop();

      $.ajax({
        url: 'ficheiro.php',
        type: "POST",
        data: formData,
        processData: false,
        contentType: false,
        success: function(data)
        {

          if(data === "")
          {
            $("#fileUploadFormResult").text("Erro!, por favor tente de novo.");
            hypeDocument.getElementById("fileUploadForm").reset();

          }
          else
          {

            $("#fileUploadFormResult").text("Envio com Sucesso!.");

            ficheiroValReal = data;
                    $('#gridBaseDados').data('kendoGrid').dataSource.add({idPai:'',tipo:ficheiroValReal, nome:ficheiroVal, dataCriacao: ''});
$('#gridBaseDados').data('kendoGrid').dataSource.sync();

          }
        },
        error: function(data) 
        {
          $("#fileUploadFormResult").text("Erro!, por favor tente de novo.");
        }         
      });

      return false;
    }));

我的网格模型是:

          batch: true,
          serverPaging: true,
          serverSorting: true,
          pageSize: 8,
          schema: 
          {
            data: "data",

            model: 
            {
                id: "idDocumento",
                fields: 
                {
                  idDocumento: { editable: false, nullable: true, type: "number"},
                  idPai: { validation: { required: false } },
                  tipo: { validation: { required: false } },
                  nome: { validation: { required: true } },
                  dataCriacao: {type:"string",editable: false},
                  dataModificacao: {type:"string",editable: false},
                }
            }
          }

我不知道是否相关,但这是我的PHP代码:

<?php

 if(isset($_POST["nameBtnEnviarFicheiro"])) 
{
    if( ($_POST["nameBtnEnviarFicheiro"]) && (empty($_POST['file'])))
    {
        echo ""; 
    }
    else
    {

     $temp = explode(".", $_FILES["file"]["name"]);
     $newfilename = round(microtime(true)) . '.' . end($temp);
     move_uploaded_file($_FILES["file"]["tmp_name"], "tabeladocumento/" . $newfilename); 
     echo $newfilename;
    }   
}
?>

因此,用户点击弹出按钮,kendowindow出现一个输入文件,用户选择一个文件,第一次,网格核心插入记录(只出现一次)...然后他关闭kendoWindow,如果他想插入一个新文件,它确实......但是记录出现了两次......创建方法被调用了两次,而且我的ficheiro.php也被调用了两次。

我也在多个地方使用过这个(下面),比如在create方法中...也就是在调用sync()之后,似乎没有任何工作。 它可能是什么?!

$('#gridBaseDados').data("kendoGrid").dataSource.read();

1 个答案:

答案 0 :(得分:1)

当您关闭窗口时,必须销毁其中的所有窗口小部件,以避免重复的实例。

http://docs.telerik.com/kendo-ui/intro/widget-basics/destroy

希望这个帮助