Jak překreslit pouze jeden snippet?

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

Potřeboval bych překreslit pouze jeden konkrétní snippet, ale aby se nepřekreslovaly ostatní.

Mám totiž na webu poměrně komplikovaný ajax formulář, který je uvnitř snippetu. A uvnitř formuláře mám další snippet, který zobrazuje náhledy nahraných fotek. Problém ale je, že když uživatel nahraje další fotku a chci překreslit tento konkrétní snippet s náhledy, překreslí se i hlavní snippet, ve kterém je celý formulář a všechny údaje, které do něj zadal uživatel se ztratí.

Pro názornost zdroják vypadá nějak tak:

<div n:snippet="edit-offer-form">
  {form editOfferForm}
    {input name}
    ...
    <div n:snippet="images-manager">
      Náhledy obrázků, tento snippet je v samostatné komponentě...
    </div>
    ...
    Další část formuláře...
  {/form}
</div>

Pokud zadám $this->redrawControl("image-manager"), bohužel to překreslí i edit-offer-form a to uživateli resetuje formulář. Děkuji za rady.

Jan Endel
Člen | 1016
+
-2
-

Pokud se invaliduje nějaký snippet, tak se invalidují i všechny, které ho obalují, protože se také jejich obsah změnil že, řešením je mít ty snippety ne zanořené, ale vedle sebe.

David Matějka
Moderator | 6445
+
0
-

To neni pravda, mel by se prekreslit pouze ten vnitrni snippet.

David Matějka
Moderator | 6445
+
+2
-

Nemas nekde (treba v render metode) invalidaci toho snippetu edit-offer-form?

dreken
Člen | 36
+
0
-

Díky za radu, ale bohužel to nepomohlo. Předělal jsem formulář na 3 snippety za sebou, takže aktuálně se žádný nevnořuje do jiného. Ale přesto se překreslí všechny, nechápu proč se tak děje. Přitom invaliduji pouze jeden.

dreken
Člen | 36
+
0
-

Tak chybu jsem odhalil. Problém byl v tom, že jsem v metodě renderDefault() používal redrawControl(). Myslel jsem si, že je ta metoda nějak inteligentní, že rozpoznává, který snippet se změnil, ale bohužel to tak není.

dreken
Člen | 36
+
0
-

Děkuji za radu, chybu jsem odhalil. Problém byl v tom, že jsem v metodě renderDefault() používal redrawControl() bez parametru. Myslel jsem si, že je ta metoda nějak inteligentní, že rozpoznává, který snippet se změnil, ale bohužel to tak není.