Nefunkční komponenta Datagrid

BuMoRi
Člen | 109
+
0
-

Ahoj, jsem v Nette začátečník a mj. se učím i z hotových kódů. Teď zkouším Datagrid a ty dva jednoduché příklady na první straně. První s využitím presenteru je v pohodě, ale u druhého komponenta neexistuje: „Component with name ‚simpleGrid‘ does not exist“.
Kod mám stejný jako v dokumentaci, jen v souboru FooControl.php nepoužívám Dibi:

<?php

namespace App\Components;

use Ublaboo\DataGrid\DataGrid;
use Nette;

class FooControl extends \Nette\Application\UI\Control
{

	public $database;

	public function __construct(Nette\Database\Context $database)
	{
		$this->database = $database;
	}

	public function render()
	{
		$this->template->render(__DIR__ . '/foo_control.latte');
	}

	public function createComponentSimpleGrid($name)
	{
		$grid = new DataGrid($this, $name);

		$grid->setDataSource($this->database->table('db_kategorie'));
		$grid->addColumnText('nazev', 'Název');
		$grid->addColumnText('popis', 'Popis');
	}
}
?>

Byl bych vděčný i za radu, jakým způsobem chybu hledat. Díky.

Gavrilo
Člen | 46
+
0
-

Ukáž presenter a tovarničku tu chybu nevidím

BuMoRi
Člen | 109
+
0
-

Presenter a továrničku mám zkopírovanou z dokumentace.

<?php

namespace App\AdminModule\Presenters;


class SimplePresenter extends BasePresenter
{

	public $fooControlFactory;


	public function createComponentFooControl()
	{
		echo 'aaa';exit;
		return $this->fooControlFactory->create();
	}
}
?>
<?php

namespace App\Components;

interface IFooControlFactory
{

	/**
	 * @return FooControl
	 */
	function create();

}
?>
David Matějka
Moderator | 6445
+
0
-

a z jake sablony volas to {control simpleGrid}? musis to volat z sablony te foo komponenty, ne z presenteru

BuMoRi
Člen | 109
+
0
-

No… to mám asi blbě, no, já to volám z šablony presenteru tak, že mám {include '../../../../components/foo_control.latte'} a ve foo komponentě {control simpleGrid}. To bude asi špatně, že?

duke
Člen | 650
+
0
-

V tovární metodě createComponentSimpleGrid ti chybí:

	return $grid;
BuMoRi
Člen | 109
+
0
-

duke napsal(a):

V tovární metodě createComponentSimpleGrid ti chybí:

	return $grid;

To nic nezměnilo. A oni v dokumentaci to nemají.

Pavel Janda
Člen | 977
+
+1
-

@BuMoRi Jakou verzi nette používáš?

BuMoRi
Člen | 109
+
0
-

Pavel Janda napsal(a):

@BuMoRi Jakou verzi nette používáš?

2.4

David Matějka
Moderator | 6445
+
+3
-

v presenteru mas mit {control fooControl}.
ty totiz ten grid nemas definovany primo v presenteru, ale v subkomponente a odtud take musi byt vykreslen (respektive mohl bys i v presenteru pouzit {control fooControl-simpleGrid}.

a potrebujes vubec tu fooControl? nestacilo by ti ten grid definovat v presenteru?

BuMoRi
Člen | 109
+
+1
-

David Matějka napsal(a):
v presenteru mas mit {control fooControl}.

Jo, tak to je ono, díky moc.
Jinak já jsem to psal v tom prvním příspěvku: definice v presenteru mi fungovala v pořádku, chtěl jsem vyzkoušet ten druhý způsob – přes komponentu.