založení signálu v handleru
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- mlha
- Člen | 58
Lze v handleru vytvořit signál pro jinou komponentu, tak aby se ihned
spracoval?
Tj. ne link se signálem, ale rovnou signál.
Nebo toto nějak simulovat jinak?
Konkrétně v handleru operací DataGridu (AJAX) potřebuji vyvolat zobrazení jiné komponenty:
<?php
protected function createComponentGrid()
{
...
$operations = array('');
$operations['confirmRole'] = 'Schválit přiřazení role';
$operations['rejectRole'] = 'Zamítnout přiřazení role';
if (count($operations)) {
$grid->allowOperations($operations, array($this, 'gridOperationHandler')); // allows checkboxes to do operations with more rows
}
...
}
public function gridOperationHandler(\Nette\Forms\SubmitButton $button)
{
$form = $button->getParent();
$values = $form->getValues();
$operation = $values['operations'];
$grid = $this->getComponent('grid');
$rows = array();
foreach ($values['checker'] as $k => $v) {
if ($v) $rows[] = $k;
}
if ($operation == 'confirmRole') {
//vyvolat componentu XY s parametry $rows
$xy = $this->getComponent('xy');
$xy->handleZobrazse($rows); //??????
}
...
}
?>
Editoval mlha (6. 5. 2011 13:40)
- Majkl578
- Moderator | 1364
V kódu, na který jsem odkázal, je vidět jak se signál volá:
$this->tryCall($this->formatSignalMethod($signal), $this->params)
Z toho vyplývá, že signál bere stejné parametry, které jsou použity při volání action/render.
Toho o co ti jde bys asi nejjednodušeji docílil vlastní metodou (takový klon signalReceived), např.:
public function signalReceivedManually($signal, array $params = array())
{
if (!$this->tryCall($this->formatSignalMethod($signal), $params)) {
$class = get_class($this);
throw new BadSignalException("There is no handler for signal '$signal' in class $class.");
}
}
//...
$component->signalReceivedManually('foo', array('x' => 1, 'y' => 2));
- Filip Procházka
- Moderator | 4668
Nebylo by lepší použít forward? Většinou totiž to co je v signálu, je lepší mít v akci. Osobně si myslím, že signály jsou dobré na stránkování, řazení a ajaxové requesty…