Disabled položky a jejich hodnota

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

Narazil jsem na problém disable položek ve formuláři.
Je jasné že disabled položky prohlížeč neodesílá. Tudíž pokud formulář neprojde kvůli chybě je třeba těmto disabled položkám opět nastavit původní hodnotu. Očekával bych ale, že ji nastavím přímo při definici formuláře, kde se rozhoduji, která položka je disabled. Nicméně to nefunguje.

$form->addCheckbox('name', 'Label')->setDisabled(true)->setValue(true);

Proto musím v render/action zjistit, která položka je disabled a hodnotu ji nastavit.

Lze to řešit nějak elegantněji?

Foowie
Člen | 269
+
0
-

->setDefaultValue(true) nepomůže?

klimax
Člen | 7
+
0
-

Jak mam obejit kontrolu formulare na poli selectboxu project, tak aby ho uzivatel nemohl vybrat, presto, aby se podle nej spravne nastavil dependentselectbox leader a pri odeslani formulare v editaci dat, aby mi dependent nehlasil chybu, ze projekt neni vybrany (pri disabled se neprovedet odeslani dat), takze ani leader v tu chvili korektne vybran.

Potrebuji uzivateli zobrazit, jaky projekt tam ma, a seznam leaderu, ktere muze vybrat, ve fazi pridavani si i projekt muze vybrat, ve fazi editace ovsem ne

pri nastaveni prvku $form[‚project‘]->setValue($data[‚project_id‘]); se dependentbox leader chova korektne, ale po odeslani formulare mi neposle nova vybrana data, ale posila mi ty defaultni z DB, coz nechci, ale chci aktualni data, ktera uzivatel vybral :(

<?php
 public function createComponentTeamsAddForm($name) {

        $teammodel = new TeamModel();
        $projects = $teammodel->getProjects();

        $form = new AppForm($this, 'teamsAddForm');


        $form->addSelect('project', 'Projekt:', $projects)->skipFirst('Vyberte projekt');
        $form['project']->addRule(Form::FILLED, 'Vyberte projekt');

        $form->addDependentSelectBox('leader', 'Leader', $form['project'], array($this, 'getValuesSelectLeader'));
        if ($this->isAjax()) {
            $form['leader']->addOnSubmitCallback(array($this, 'invalidateControl'), 'formSnippet');
        }
        $form['leader']->addRule(Form::FILLED, 'Vyberte leadera');

//dalsi formularove prvky



//ziskani dat z DB
$data = $teammodel->getData($this->id);

//nastaveni defaultnich dat z DB do formulare
$form->setDefaults(array(
                'project' => $data['project_id'],
                'leader' => $data['leader_id'],
            ));

//zakazani selectu
$form['project']->setDisabled(true);
//nacteni dat pro leadera
$form['leader']->refresh();


	$form->addSubmit('edit', 'Uložit');
            $form->onSubmit[] = callback($this, 'editTeamsSubmitted');


        return $form;
?>

nette 0.9.7
php 5.3

Editoval klimax (1. 3. 2011 8:16)

klimax
Člen | 7
+
0
-

tak jelikož ani

<?php
$form['project']->getControlPrototype()->readonly='readonly';
?>

na selectu nefunguje

použil jsem tohle

<?php
$form['project']->getControlPrototype()->onfocus = 'this.defaultIndex=this.selectedIndex';
$form['project']->getControlPrototype()->onchange = 'this.selectedIndex=this.defaultIndex';
?>

ale asi moc elegantní řešení to není, pokud uživatel bude mít zakázaný javascript