Nevykreslení prvku ve formuláři

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

Ahoj,
podle dokumentace na webu jsem se dočetl, že by tohle: $form['save']->setRendered(TRUE); mělo vynechat prvek z vykreslování. Ale bohužel nestane se tak.

Našel jsem si ve zdrojáku rendereru tuhle lajnu:

public function renderBegin()
{
..
  foreach ($this->form->getControls() as $control) {
    $control->setOption('rendered', FALSE);
  }
...
}

Nemůže to být tím? Díky

Jod
Člen | 701
+
0
-

Môže :) nastavovať to môžeš až vo vnútri formulára. Myslím že to aj slúži na interné potreby formulára. Veď minule sa to tu už pár krát riešilo, pohladaj.

Honza Kuchař
Člen | 1662
+
0
-

Tak už jsem to našel. Zase jsem akorát málo hledal :(
Takže alespoň odkaz, kdyby sem někdo došel a hledal to samý.

» Nette\Forms » problém u setRendered()

laada
Člen | 35
+
0
-

honzakuchar napsal(a):

Tak už jsem to našel. Zase jsem akorát málo hledal :(
Takže alespoň odkaz, kdyby sem někdo došel a hledal to samý.

» Nette\Forms » problém u setRendered()

Ahoj,
roste, obsah ‚spatneho‘ odkazu vyse, jeste nekde?

Zrovna jsem na to narazil.

dik

David Grudl
Nette Core | 8228
+
0
-

Nevykreslení bych spíš řešil přes unset($form['save'])

laada
Člen | 35
+
0
-

David Grudl napsal(a):

Nevykreslení bych spíš řešil přes unset($form['save'])

takze setRendered() je zavrzena?

Pouzivam ji na nekolika mistech a docela funguje az na dnesni vyjimku.

medhi
Generous Backer | 255
+
0
-

Když prvek nevykreslím pomocí unset($form['save']), pořád je nějak aktivní, čili hlásí to, že jsem ho nevyplnil, jak se zbavit i tohoto? Díky

_Martin_
Generous Backer | 679
+
0
-

A kde to voláš?

medhi
Generous Backer | 255
+
0
-

Volám to v renderEdit().

Také jsem zkoušel další možnost: V renderEdit() vím, že chci vykreslit jedno pole navíc, tak si nastavím proměnnou $this->showTitleField = TRUE a potom v továrničce createComponentReplyForm() se zeptám

		if ($this->showTitleField)
		{
			$form->addText('title', 'Title:')
				->addRule(Form::FILLED, 'Napište název.');
		}

Ale bohužel se tam ta hodnota nepřenese, asi už je to pozdě. Měl bych to řešit v beforeRender? Nebo na to mám jít úplně jinak? Díky

_Martin_
Generous Backer | 679
+
0
-

V rendrovací fázi je pozdě, musí to být před zpracováním signálů (viz. životní cyklus presenteru)… Tohle buď řeš přímo v továrničce a nebo v action metodě (actionEdit).