Diskuze: nette - ajax snippet
Člen
Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Mělo by ti v metodě na zpracování použít
$presenter->redrawControl("název snippetu");
kde $presenter může být $this (pokud jsi v presenteru), nebo třeba $this->presenter, pokud jsi v komponentě.
Bohužel nefunguje. Tento kod mám v presenteru:
/**
* Vytvoří formulář pro úpravu dané entity
*
* @param $entity
* @return Form
*/
public function createComponentEditConfigForm($entity)
{
$this->configurationFacade->setEntity($this->getEntity());
$form = $this->BuildEditForm();
$form->onSuccess[] = function (Form $form) {
$presenter = $form->getPresenter();
//$presenter->flashMessage("form.config.updateSuccess");
//$this->section->remove();
//$this->oneToManySection->remove();
//zatím nefunguje :(
$presenter->redrawControl("pokus");
$this->redrawControl("editTable");
};
return $form;
}
Jak jde vidět zakomentoval jsem manipulaci se session, takže tímto to být
nemůže.
Jednou volám redirect přes this, jednou přes presenter.
jak máš udělanou šablonu? nemáš ten snippet někde v includované šabloně? jakou JS knihovnu pro ten ajax používáš?
používám nittro konkrétně nittro.full.js
ne includovanou ji nemám. Vypadá takto:
{block content}
<h2>Application</h2>
{snippet editTable}
{control configTable}
{/snippet}
{snippet pokus}
pok {$pokus}
{/snippet}
{snippet showModal}
{if $showSimpleForm}
{snippet simpleForm}
<!-- Modal -->
<script>$('#myModal').modal();</script>
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog modal-lg">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Modal Header</h4>
</div>
<div class="modal-body">
<h2 class="center">Úprava aplikace</h2>
<div class="row">
<div class="col-md-1"></div>
<div class="col-md-10">
{control editConfigForm}
<br>
<h2 class="center"> Nahrávání souborů </h2>
<br>
{control multiFile}
</div>
<div class="col-md-1"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script>
initTinyMce('descreption');
$( "#frm-editConfigForm" ).submit(function( event ) {
//alert( "Handler for .submit() called." );
$(".close").click();
$('#myModal').close();
});
</script>
{/snippet}
{/if}
{/snippet}
<!-- tak a modal pro přidávání -->
{snippet showInsertModal}
{if $showSimpleInsertForm}
{snippet simpleInsertForm}
<script>$('#myInsertModal').modal();</script>
<div class="modal fade" id="myInsertModal" role="dialog">
<div class="modal-dialog modal-lg">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Modal Header</h4>
</div>
<div class="modal-body">
<h2 class="center">Úprava aplikace</h2>
<div class="row">
<div class="col-md-1"></div>
<div class="col-md-10">
<h2>Configuration Facade test</h2>
{control insertConfigForm}
</div>
<div class="col-md-1"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script>
initTinyMce('descreption');
$( "#frm-insertConfigForm" ).submit(function( event ) {
//alert( "Handler for .submit() called." );
$(".close").click();
$('#myInsertModal').close();
});
</script>
{/snippet}
{/if}
{/snippet}
{/block}
Nittro neznám, tak ti asi neporadím. Jinde ten AJAX funguje?
Ano v handle metodách mi normálně funguje. Napříkla zde:
public function handleEdit($id)
{
//nadefinuji si entitu
$this->entity = $item = $this->configurationFacade->setEntity($this->getEntity())->getEntity($id);
//pro MultiFileUpload
$this->mainEntitySection->entity = $this->entity;
$this->updatedId->id = $id;
//zpracování
if ($item) {
$item = (array)$item;
//vytvořím formulář a pošlu mu data z entity
foreach ($item as $key => $value) {
$item = $this->SetItem($value, $item, $key);
unset($item[$key]);
}
$this["editConfigForm"]->setDefaults($item);
} else {
$this->flashMessage('Entity is not loaded.', self::TYPE_ERROR);
}
if ($this->presenter->isAjax()) {
$this->template->showSimpleForm = 5;
$this->redrawControl("showModal");
$this->redrawControl("editTable");
}
}
Ahoj, podarilo se to vyresit? Ja jsem narazil na podobny problem. Nedarilo se mi, aby readraw akceptoval zmenu hodnot ve formulari. Zabralo az zruseni komponenty formulare v onSuccess. Pak doslo k znovuvytvoreni formulare a je to OK.
public function accountFormSucceeded(Form $form, $values)
{
if ($this->isAjax()) {
$this->removeComponent($this->getComponent('accountForm'));
$this->redrawControl('flashes');
$this->redrawControl('accountFormSnippet');
} else {
$this->redirect(':Core:Administration:account', $userId);
}
}
Zobrazeno 8 zpráv z 8.