DynamicContainer – Dynamické přidávání/odebírání FormContainerů

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

Dynamic(Form)Container

Všechny informace jsou na GitHubu .

Až bude více času udělám nějaké demo a přidám do addonů.

Enjoy :)

Edit: Nějakou dobu mi to leželo na disku tak jsem to sem hodil ;)

Editoval Foowie (7. 10. 2010 21:50)

redhead
Člen | 1313
+
0
-

Tohle se plánuje do Nette\Forms v Nette 2.0, resp. David by to měl mít už implementované, myslím..

Editoval redhead (7. 10. 2010 21:48)

JakubJarabica
Gold Partner | 184
+
0
-

Jupí! Vďaka, ráno skúšam :)

darthcz
Člen | 113
+
0
-

Musel jsem pro verzi 2.0 upravit kód. Psalo to něco ve stylu, že nemůžu použít $this.. Tak kdyby měl někdo stejný problém, je nutné přepsat funkci fetchNameAndModifiers například takto:

protected static function fetchNameAndModifiers($code) {
		$name = \Nette\Templates\LatteFilter::fetchToken($code);

                $latte = new \Nette\Templates\LatteMacros();
                $modifiers = $latte->formatArray($code);
                $name = String::startsWith($name, '$') ? $name : "'$name'";
		//$modifiers = LatteMacros::formatArray($content);
		$modifiers = $modifiers ?: "array()";


		return array($name, $modifiers);
	}
Foowie
Člen | 269
+
0
-

Fixed

Hanz
Člen | 16
+
0
-

Dá se tato komponenta nějak jednoduše napojit na AJAX, aby se při přidání pole nemusela načíst celá stránka znovu?

Foowie
Člen | 269
+
0
-

Ano, jako ostatní formuláře.

  • Přidat jquery, jquery.nette. jquery.ajaxform a nějakou inicializaci na ajax požadavky submitů … například
$(":submit.ajax").live("click", function (event) {
	$(this).ajaxSubmit();
	return false;
});
  • Obalit formulář snippetem, např {snippet form}{control form}{/snippet}
  • Někde (např v render metodě) zavolat invalidaci snippetu
if($this->isAjax() && $this["form"]->isSubmitted())
	$this->invalidateControl("form");

Toť vše …

Edit: „ajax třída“ se dá nastavit pomocí $dynamicContainer->setAjax(true, "ajaxClass");

Editoval Foowie (31. 1. 2011 12:07)

Hanz
Člen | 16
+
0
-

Foowie napsal(a):

Ano, jako ostatní formuláře.

  • Přidat jquery, jquery.nette. jquery.ajaxform a nějakou inicializaci na ajax požadavky submitů … například
$(":submit.ajax").live("click", function (event) {
	$(this).ajaxSubmit();
	return false;
});
  • Obalit formulář snippetem, např {snippet form}{control form}{/snippet}
  • Někde (např v render metodě) zavolat invalidaci snippetu
if($this->isAjax() && $this["form"]->isSubmitted())
	$this->invalidateControl("form");

Toť vše …

Edit: „ajax třída“ se dá nastavit pomocí $dynamicContainer->setAjax(true, "ajaxClass");

Děkuji za reakci.
Jinak jsem narazil na jednu „chybu“. Pokud přidám DynamicContainer do formuláře a pak nastavím výchozí hodnoty přes setDefaults, tak se automaticky nepřidá potřebné množství polí. Sice se ten počet polí dá nastavit ručně, ale myslím, že by bylo přívětivější, kdyby se přidaly samy.

maki
Člen | 1
+
0
-

zdravim,

len poznamka, alebo mam chybu ja? ;)

verzia z gitu

Undefined variable: control

File: … DynamicFormContainer/FormMacros.php Line: 37

dakujem