Překreslování komponety pomocí ajaxu nefunguje

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

Ahoj,
mám takový problém. Někde dělám něco určitě blbě, ale tak nějak nevím kde

Mám komponentu UploadForm která je potomkem BaseFormControl
V komponentě je celá její obsluha.

Problém je v tom, že mě nefunguje překreslení, ale požadavek se normálně provede. Když stránku obnovím tak je vše správně.

GET http://externo.dev/…photo-upload?…
200 OK
1949ms

public function handleSetFeature($id, $articleId)
    {

        /**
         * @var \App\Model\Entities\Image $image
         */
        $image = $this->em->find(EImage::class, $id);
        /**
         * @var \App\Model\Entities\Article $article
         */
        $this->article = $article = $this->articles->findById($articleId);
        $article->featureImage = $image;
        $this->articles->save($article);
        $this->redraw();
    }

 public function redraw()
    {
        //Debugger::barDump($this->presenter->isAjax(), 'Ajax');
        $this->redrawControl('photos');
        $this->presenter->redrawControl('photoUpload');

        /**if ($this->getPresenter()->isAjax()) {  //pokud je ajax prekreslíme snippety

            //$this->redrawControl('photoUpload');
        }
        else { //pokud není (nepodporuje JS, přeměrujeme
            $this->redir();
        }*/
    }

public function render()
    {

        if (is_null($this->article)) {
            $id = $this->getPresenter()->getParameter('id');
            $this->article = $this->articles->findById($id);
        }
        Debugger::barDump($this->article, 'article');
        Debugger::barDump($this->article->images, 'Images');

        $this->template->article = $this->article;
        parent::render();
    }

PhotoForm.latte

<div class="container">
	<div class="col-md-12">
	<h2>Nahrání fotek k {$article->titleCz}</h2>
		{control form}
	</div>
	<div class="col-md-12">
	{snippet photos}
	{foreach $article->images as $image}
		<div class="col-md-2">
			<div class="thumbnail">
				<img src="{$basePath}/images/akce/{$article->id}/{$image->fileName}">
			</div>
			<div>
				<a class="btn btn-success {if $article->featureImage->id == $image->id}disabled{/if} ajax"
					n:href="SetFeature! $image->id, $article->id" class="ajax">Nastavit jako výchozí</a>

				<a class="btn btn-warning ajax" n:href="DeleteImage! $image->id">Smazat</a>
			</div>
		</div>
	{/foreach}
	{/snippet}
	</div>
</div>

BaseFormControl

abstract class BaseFormControl extends UI\Control
{
    /* @var array nastaveni komponenty */

    public $settings = array();


    /**
     * @description Přepsání defaultní metody pro vytvoření template
     * @param null $class
     * @return UI\ITemplate
     */
    public function createTemplate($class = null)
    {
        $template = parent::createTemplate($class);

        if ($template instanceof Template) {

            $path = dirname(ClassType::from($this)->getFileName()) . '/' . ClassType::from($this)->getShortName() . '.latte';
            $template->setFile($path); // automatické nastavení šablony
        }
        $template->_form = $template->form = $this['form']; // kvůli snippetům
        return $template;
    }

    public function render()
    {
        if ($this->template instanceof Template
            && !is_file($this->template->getFile())
        ) {
            $args = func_get_args();
            return call_user_func_array(array($this['form'], 'render'), $args);
        } else {
            $this->template->render();
        }
    }

}

latte pro presenter

{block content}

{snippet photoUpload}
	{control photoUpload}
{/snippet}
{/block}
Michal Vyšinský
Člen | 608
+
0
-

Ahoj,
nevidím žádný JS kód – co používáš na obsluhu snippetů v js?

David Matějka
Moderator | 6445
+
0
-

a co prijde v odpovedi? json se snippetama?

ondraondra81
Člen | 82
+
0
-

vrací se mě celé HTML :/

David Matějka
Moderator | 6445
+
0
-

co mas za verzi nette?

ondraondra81
Člen | 82
+
0
-

Verzi nette mam 2.2.3

ondraondra81
Člen | 82
+
0
-

ted koukám, že mě to generuje chybu do logu
Cannot send header after HTTP headers have been sent (output started at …\src\vendor\nette\forms\src\Forms\Form.php:595).

ondraondra81
Člen | 82
+
0
-

tak když dám do bootstrap $container->getByType(‚Nette\Http\Response‘)->warnOnBuffer = FALSE;
tak mě to posila JSON

problém je v tom, že tím potlačím to varování (otázkou je zda je to tak dobre)

z výstupu OutputDebbgeru moudrý vážně nejsem