handle vraci celou stranku misto payload

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

Mam v sablone:

function refillForm(link, formid, errors, getparams)
        {
            $.ajax ({
                type: "GET",
                url: link,
                dataType: 'json',
                async: false,
                data: getparams,
                success: function(payload) {
                        if(payload.modal == true)
                        {
                            $('#formModal').html(payload.tpl).modal('show');
                            $('#formModal form').each(function() {
                                Nette.initForm(this);
                            });

                            $.nette.load();
                        }
                       // var e= {$form->errors|implode:','};
                        err = errors.split(',');
                        $('.form-error').removeClass('hide');
                          $.each(err, function(index, value) {
                            var div = $('#'+formid+value).closest('div[class="control-group"]');
                            div.addClass('error');
                            $('#formModal form').each(function() {
                                Nette.initForm(this);
                            });

                        });
                },
                error: function(jqXHR, status, error) {
    }
            })
        }

a handler:

public function handleEditForm($id)
    {

        if ($this->isAjax())
        {

            $tpl = $this->template->setFile(__DIR__ . '/../templates/Creatives/form.latte');
            $this->creativeRecord = $this->creatives->find($id);

			....

            $this->template->title = 'Upravit '. HTML::el('span', $this->creativeRecord->name)->setClass('text-info');

            $this->payload->tpl = (string) $tpl;
            $this->payload->modal = true;

            $this->redrawControl();
        }
    }

V Nette 2.1.1 mi ajax vracel json, v nette 2.2.3 mi vrati celou stranku :( A nevim co s tim.

nanuqcz
Člen | 822
+
+2
-

Ahoj,

  1. Metoda redrawControl() slouží k invalidaci komponenty, nebo snippetů. Po takovéto invalidaci se pak všechny tyto invalidované komponenty odešlou jako obsah proměnné $this->payload->snippets na výstup. Ve tvém případě pravděpodobně invaliduješ celý presenter, a tak se ti na výstup posílá celá šablona. Praxe je taková, že pokud používáš v šablonách snippety, použij v presenteru metodu redrawControl('nazev_snippetu').
  2. Pokud chceš ale plnit $this->payload ručně (což je tvůj případ), používá se k jeho odeslání metoda sendPayload().

Závěr: Nahraď $this->redrawControl(); za $this->sendPayload(); a mělo by to dělat, co očekáváš.

libik
Člen | 96
+
0
-

Ahoj,

diky za odpoved. Nicmene nefunguje mi to ani se sendPayload, ktery jsem jiz zkousel. Ale vitr vane asi malinko odjinud, kdyz se podivam ve firebugu na parametry ajax dotazu, je tam jedno do navic (to creativeForm-submit).

_submit	Odeslat
active	on
active_from
active_from_picker
active_to
active_to_picker
do	addForm
do	creativeForm-submit
id
link_type	nolink
name
notValid	1
url

Mozna to ma souvislost s tim, ze je parametr do v teto verzi Nette uz v POSTu. Jdu teda patrat…

libik
Člen | 96
+
0
-

Tak jsem na to asi prisel.

Formular slouzi k uploadu souboru a po vlastni validaci ho znovu po reloadu stranky nacitam a plnim daty z $getPost = $this->httpRequest->getPost();

V teto verzi Nette se tam objevil i parametr do=creativeForm-submit, ktery to zpusoboval.
Nicmene nahradim redrawControl() za sendPayload() i tak.