komponenta v komponentě ajax

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tomfz6
Člen | 32
+
0
-

Času mám takový problém

v komponentě volám tu znova tu samou komponetu (jen jiný render) zde je komponenta

<?php
class ProductBox extends Control {


       /** @var int */
    private $relationClick=0;



	public function renderList($StiId) {

	......


        $this->template->render();
    }



  public function renderDetail($StiId) {

 	$this->template->setFile(__DIR__ . '/../../presenters/templates/Product/Components/boxDetail.latte');

        $this->template->relationClick=$this->relationClick;

        $this->template->render();
    }



  public function handlerelationVisible() {
        $this->relationClick=1;
        $this->redrawControl('relation');
    }


}


interface IProductBox {

    /** @return ProductBox */
    public function create();
}
?>

v té sablone komponenty renderdetail volám znova na klik tu komponentu renderList

<?php

 <div class="product-gallery">
{snippet relation}
    {if $relationClick==1}
        {if $productsRelation}
            {foreach $productsRelation as $product}
                {control productBox:list $product->StiId}
            {/foreach}
        {else}
            Nejsou vloženy žádné související produkty
        {/if}
    {else}
        <a class="ajax" n:href="relationVisible!">Zobrazit produkty</a>
    {/if}
{/snippet}
?>

Pokud ten požadavek není ajaxový n:ref="relationVisible! tak je to ok ale pokud to odešlu ajaxově tak chyba Nette\MemberAccessException: Call to undefined method App\Components\ProductBox::render()

Nedokázal by někdo poradit?

Dík moc

Barvoj
Člen | 60
+
+1
-

Nedávno jsme na to taky narazili.. Problém je v tom, že na komponentě se při ajaxu volá pouze metoda render .

Jak to správně vyřešit bohužel nevím :(

Editoval Barvoj (29. 6. 2016 16:55)

CZechBoY
Člen | 3608
+
+1
-

Vyřešit třeba předáním parametrů přes konstruktor/settter.
Ale teda lepší je mít 2 komponenty – jednu na seznam produktů a druhou na detail.

Editoval CZechBoY (29. 6. 2016 16:58)

tomfz6
Člen | 32
+
0
-

Zatím dík za rady ale fakt by neměl někdo jiné řešení než dvě komponenty?

CZechBoY
Člen | 3608
+
0
-

V čem ti vadí 2 komponenty?

tomfz6
Člen | 32
+
0
-

už to asi chápu ty komponenty nemužou být tvořeny jako Flyweight ale musí to být přes Multiplier, kdybych udělal druhou komponentu stejně tak mi to asi nepomůže..

No nic jdu to zkusit…

CZechBoY
Člen | 3608
+
0
-

Na multiplieru není nic moc složitýho https://doc.nette.org/…n/multiplier – asi tě zajímá příklad úplně dole.