Vytvoření komponenty v kompontě, ale umístit mimo komponentu která vytvořila

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

Zdravím,
potřeboval bych poradit s vytvářením komponenty. Přidal jsem si do Nette\Forms\Form novej prvek addFileManager($name, $label = null);

ale tato komponenta pro svůj život potřebuje ještě jinou komponentu. Tak jak je to momentálně postavené se komponenta používá takto:

protected function createComponentUpload()
{
	$form = new \Nette\Application\UI\Form;
	$form->addFileManager('test', 'file');
	$form->addSubmit('submit');
	$form->onSuccess[] = $this->send;
	return $form;
}

protected function createComponentManager($name)
{
	return Manager($this, $name);
}

a v šabloně:

{form upload}
	...
	{input file}
	...
{/form}
{control manager}

Ale rád bych to zjednodušil, aby stačilo přidat do formuláře addFileManager() a potřebná komponenta by se automaticky vytvořila.
Zkoušel jsem použít $form->addComponent(); která by se mohla vytvářet automaticky při volání addFileManagera ale ta komponentu manager vloží do formuláře (komponenty) upload a to nedělá dobrotu, protože samotná komponenta manager obsahuje jiný formulář

Nevěděl by někdo jak s tím hnout aby se vyhnul vytváření 2 komponenty ručně a vystačil si se zápisem:

protected function createComponentUpload()
{
	$form = new \Nette\Application\UI\Form;
	$form->addFileManager('test', 'file');
	$form->addSubmit('submit');
	$form->onSuccess[] = $this->send;
	return $form;
}

a v šabloně:

{form upload}
	...
	{input file}
	...
{/form}

Kdy to nějak zjednoduším:
Potřebuji v komponentě „A“ vytvořit komponentu „B“ ale tuto komponentu „B“ umístit mimo komponentu „A“

Předem díky

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Proč instance FileManageru nedědí od Controlu a nemá na Manager vlastní továrničku v sobě?

Budry
Člen | 88
+
0
-

Nevím jestli jsem to dobře pochopil, ale já nemůžu dědit od controlu když přidávám rozšíření k formulářům ta třída co generuje addFileManager(…):

class FileManager extends \Nette\Forms\Controls\BaseControl
{
	/**
	 * @var string input class
	 */
	private $className = 'Kappa-fileManager';

	/**
	 * @param string $label
	 */
	public function __construct($label = null)
	{
		parent::__construct($label);
		$this->control->type = 'text';
	}

	/**
	 * @return string
	 */
	public function getClassName()
	{
		return $this->className;
	}

	/**
	 * @return Nette\Utils\Html
	 */
	public function getControl()
	{
		$control = parent::getControl();
		$control->addClass($this->className);
		return $control;
	}

}

Těžko to ještě podědím do Controlo abych udělal komponentu…