Překreslení snippetu po ajaxovem nahrani souboru pres dropzone
- hancs
- Člen | 57
Ahoj používám pro nahrání souborů dropzone, ten ajaxove zavolá po přidání souboru rovnou submit. Soubory se v pořádku nahrají, ale nepřekreslí se mi snippet s výpisem souborů. Přitom v response se správný snippet vrátí. A v template values mám taky správná data, jen nejsou vykreslená. Nevíte někdo čím to může být?
Díky
<?php
public function createComponentUploadForm()
{
$form = new \Nette\Application\UI\Form();
$form->getElementPrototype()->addAttributes(["class" => "dropzone"]);
$form->addMultiUpload("file", NULL);
$form->onSuccess[] = array($this, 'uploadFile');
return $form;
}
public function uploadFile($form) {
if($this->isAjax()) {
// $this->template->tempSoubory = $form->values->file;
$this->FileManager->saveFiles($form->values->file, $this->id, 'zakazka', $this->getUser()->getId());
$this->redrawControl("soubory");
//$this->redrawControl();
}
}
?>
<form n:name=uploadForm class="dropzone ajax" id="dropzoneSoubory">
<div class="fallback">
<input n:name=file type="file" multiple/>
</div>
<div class="dz-default dz-message">
<span>Přetáhněte soubory pro nahrání</span>
</div>
</form>
- hancs
- Člen | 57
Odpovím si sám, kdyby to někdo potřeboval. Stačilo po nahrání souborů ještě zavolat přes nette.ajax handle kde se jen překreslí snippet.
<script>
Dropzone.options.dropzoneSoubory = {
paramName: "file", // The name that will be used to transfer the file
maxFilesize: 2, // MB
uploadMultiple: true,
init: function () {
this.on("complete", function (file) {
if (this.getUploadingFiles().length === 0 && this.getQueuedFiles().length === 0) {
$.nette.ajax({
type: 'GET',
url: $("#dropzoneSoubory").data('link')
});
}
});
}
}
</script>
<?php
public function handleSouboryUpdate(){
$this->redrawControl("soubory");
}
?>
- Altimit
- Člen | 82
To děláš složitě.. v nette.ajax je krásná funkce, která se právě značí třídou form.ajax
<script type="text/javascript">
$("form.ajax").on("submit", function () {
$(this).ajaxSubmit();
return false;
});
$("form.ajax :submit").on("click", function () {
$(this).ajaxSubmit();
return false;
});
</script>
zkus si to dopsat do .latte souboru, kde máš ten upload formulář, promaž cache a zkus to znova :)
- Matey
- Člen | 142
<script>
$("#uploads").fileinput({
//...
}).on('fileuploaded', function(event, data) {
var snippets = data.response.snippets;
if (snippets) {
$.nette.ext('snippets').updateSnippets(snippets);
}
});
</script>
ešte je tu aj táto možnosť, ak ti event ‚complete‘ posiela aj nejaký parameter cez ktorý sa dá dostať k response snippetom.
Editoval Matey (10. 2. 2017 8:38)