Překreslení snippetu po ajaxovem nahrani souboru pres dropzone

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
hancs
Člen | 57
+
0
-

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
+
0
-

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
+
-1
-

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
+
0
-
<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)