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
+
0
-

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
+
0
-

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í.

iwory
Člen | 147
+
0
-

No tak jsi tak na 90% úspěšný :-D
Jede to dobře, akorát je jenom jeden jediny problém :-)

Snippet se aktualizuje a načtě správný obsah, když z něho ale odšlu nějaký požadavek a snippet se znovu aktualizuje, tak se zpátky načtě ten první sdefaultním productID :-/

arron
Člen | 464
+
0
-

Není tehle řádek zvláštní??

$vote->setProductID($product ? $this->someDefaultProductId : null);
Oli
Člen | 1215
+
0
-

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…

iwory
Člen | 147
+
0
-
$vote->setProductID($product ? $this->someDefaultProductId : null);

To jsem pochopil a upravil…
Sice se teď již nevrací původní, ale neivaliduje se jeho stav.
Zkusím nějak potunit.

Díky za pomoc :-)