Překreslování komponety pomocí ajaxu nefunguje
- ondraondra81
- Člen | 82
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}
- ondraondra81
- Člen | 82
normálně nette.ajax.js
viz https://componette.org/search/?…
a https://github.com/…ette.ajax.js
- ondraondra81
- Člen | 82
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
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