Zavolání komponenty ajaxem
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- iwory
- Člen | 147
Zdravím, snad již poslední dotaz :-)
Zajímalo by mě, jako Ajaxem zavolat komponentu aby vrátila svoje HMTL.
Respektvě mám JS
function data_getProductDialog(productID)
{
$.get({link productPopUp!}, { "{!$control->getParameterId('productID')}": productID }, function(data)
{
//prepareDialogData(data);
return false;
}
}
Po zavolání data_getProductDialog a předání parametru productID bych potřeboval aby se zavolal handle, v něm se inicializovala componenta, předal se jí parametr a vrátil pouze vygenerovane HTML componenty.
Všechno mám, ale nevím jak vrátit pouze to html?
public function handleProductPopUp($productID)
{
$vote = new \ProductVoteControl();
$vote->setUser($this->user);
$vote->setProductModel($this->productModel);
$vote->setProductID($productID);
$vote->setType(0);
$vote->setConfig($this->config);
return $vote;
// Ja vratit pouze tuto vygenerovanou komponentu?
}
Díkym oc
- Oli
- Člen | 1215
Já bych to udělal asi takhle:
public function createComponentProduct()
{
$vote = new \ProductVoteControl();
$vote->setUser($this->user);
$vote->setProductModel($this->productModel);
$vote->setProductID($product ? $this->someDefaultProductId : null);
$vote->setType(0);
$vote->setConfig($this->config);
return $vote;
}
public function handleProductPopUp($productID)
{
$this['product']->setProductID($productID);
$this->invalidateControl('product');
}
//sablona
{snipet product}
{control product}
{/snipet}
Psáno z hlavy, nevím jestli to je funkční nebo vůbec dobré řešení.
- Oli
- Člen | 1215
iwory: Mas pravdu, melo by pomoct.
if (!$this->isAjax())
{
$vote->setProductID($product ? $this->someDefaultProductId : null);
}
On se pri tom ajaxu zavola zase celej zivotni cyklus.
arron: je. Chtěl jsem tím jen říct, že si tam může naplnit defaultní data treba z action, z db…