Нетт - обновление фрагмента - PullRequest
0 голосов
/ 07 сентября 2018

У меня проблема с обновлением фрагмента. После изменения выделения в поле выбора я перерисовываю содержимое параметров в другом окне выбора, но фрагмент не обновляется.

Latte:

<form class="df-checkout">
...

<select n:href="getHraci!" name="domaci" id="domaci" class="form-control">
    <option value="">Vybrat</option>
    <option n:foreach="$tymy as $tym" value="{$tym->getId()}">
        {$tym->getNazev()}
    </option>
</select>

...

<div class="row helpers hidden">
    <select n:snippet="hraciDomaci" class="form-goly-domaci-select form-control">
        <option></option>
        <option n:foreach="$hraciDomaci as $hrac" value="{$hrac->getId()}">
            {$hrac->getPrijmeni()} {$hrac->getJmeno()}
        </option>
    </select>

    <input type="text" class="form-goly-input form-control">
</div>

JS файл:

$(document).ready(function(){
    $("#domaci").bind('change', function() {
        var link = $(this).attr("href");

        $.nette.ajax ({
            url: link,
            data: {"strana": "domaci", "tymId": $(this).val()},
            type: 'get',
            dataType:'json'
        });
    });
});

Контроллер:

public function handleGetHraci($strana, $tymId)
{
    $tym = $this->tymManager->getTymRepository()->find($tymId);
    $muzstvo = $this->tymManager->getMuzstvoRepository()->findBy(["nazev" => self::HLAVNI_TYM]);
    $hraci = $this->hracManager->getHracRepository()
                ->findBy(["tym" => $tym, "muzstvo" => $muzstvo], ["prijmeni" => "ASC", "jmeno" => "ASC"]);

    if($this->isAjax()){
        $this->template->hraciDomaci = $hraci;

        $this->redrawControl('hraciDomaci');
    }
}

Форма еще не была создана и обработана, поэтому первое поле выбора, которое я сделал, временно, и поле выбора с фрагментом не зависит от формы. Я использую это для копирования. JS правильно вызывает обработчик, и если я дам дамп $ this-> template-> hraciDomaci до redrawControl , данные там, но redrawControl ничего не сделает. Но новая строка с процессом добавляется на страницу в нижней панели Трейси. У меня нет ошибки в моем отладчике, процесс имеет статус 200, но ответ содержит только:

{"state":[],"snippets":{"snippet--hraciDomaci":"\t\t\t\t\t\t\t\t\t\t<option></option>\n"}}

Я пытался использовать $. Получить вместо $. Nette.ajax , обернуть в snippetArea , и у меня обычно это есть код в {block content}, поэтому snippetArea не требуется. nette.ajax.js с инициализацией $.nette.init(); У меня тоже.

Большое спасибо за любые советы.

1 Ответ

0 голосов
/ 07 сентября 2018

убедитесь, что вы не переписываете переменную hraciDomaci в методе render* (например, renderDefault) в докладчике

...