我知道这个问题已被发布了几次,除非找到我在网格上的行为的答案,否则我没有做任何其他事情...问题是,创建方法被称为倍数插入第一个后的时间......所以第一个插入好,第二个重复两次,依此类推:
我的网格上有一个带有两个按钮的内联网格,第一个按钮正常插入,第二个按钮在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();
答案 0 :(得分:1)
当您关闭窗口时,必须销毁其中的所有窗口小部件,以避免重复的实例。
http://docs.telerik.com/kendo-ui/intro/widget-basics/destroy
希望这个帮助