Zákaz vracení hodnot disabled prvků

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

Ahoj lidi,

chtěl jsem si do formulářů 2.0 přidat metodu, která by odfiltrovala hodnoty z formulářových prvků, které jsou disabled (inspirován formuláři 2.1).

Narazil jsem však na problém, kdy v presenteru sice prvku disabled změním na TRUE, ale při zpracování už je disabled zase na hodnotě nastavené při definici formuláře. Takže tak jako tak získám hodnotu, byť práznou.

Napadá někoho, jak to vyřešit?

Patrik Votoček
Člen | 2221
+
0
-

nejspíš to děláš (to nastavování disabled) v render metodě zkus to dělat v action :-)

Lawondyss
Člen | 106
+
0
-

No vlastně disabled nastavuju v signálu.

vvoody
Člen | 910
+
0
-

Možno by pomohlo sem rovno skopírovať tvoj kód.

Lawondyss
Člen | 106
+
0
-

Metoda pro vrácení hodnot v mém UserForm:

public function getValues($asArray = false)
{
  $values = $asArray ? array() : new ArrayHash;

  foreach ($this->getComponents() as $name => $control) {
    if ($control instanceof IControl && !$control->isDisabled() && !($control instanceof SubmitButton)) {
      $values[$name] = $control->getValue();

    } elseif ($control instanceof Container) {
      $values[$name] = $control->getValues($asArray);
    }
  }

  // unset empty ID
  if ($values['id'] === '') {
    unset($values['id']);
  }

  // unset input for only check edit
  if (isset($values['isEdit'])) {
    unset($values['isEdit']);
  }

  return $values;
}

Vytvoření v presenteru:

public function createComponentUserForm()
{
  return new UserForm;
}

Signál pro vykreslení formuláře:

public function handleEdit($id)
{
  if (!isset($id)) {
    $title = 'Add new';

  } else {
    $title = 'Edit existing';

    $user = $this->usersRep->find($id);
    $user->isEdit = true;

    $this['userForm']->setDefaults($user);
    $this['userForm']['login']->setDisabled();
  }

  $this->dialog()
      ->show($this['userForm'])
      ->title($title);
}
vvoody
Člen | 910
+
0
-

Stránka ktorá niečo vykresluje nemá byť signál, keď odošleš formulár tak signál sa zmení na iný a už sa ti handle edit nespustí.

MartinitCZ
Člen | 580
+
0
-

handleEdit má být actionEdit

Lawondyss
Člen | 106
+
0
-

Asi bych měl ještě dodat, že používám signál, protože tím formulář vykresluju do modal okna.

Jestli tedy máte někdo způsob, jak vykreslit formulář do modal okna a přitom vyřešit problém s disabled prvky, budu jenom rád.

MartinitCZ
Člen | 580
+
0
-

@**Lawondyss**: To, že je v modal okně na to nemá vůbec vliv.