holubj / NiftyGrid

DataGrid for Nette Framework
34 stars 34 forks source link

Chyba při vytváření komponenty #24

Closed ghost closed 12 years ago

ghost commented 12 years ago

Zdravím. Narazil jsem na problém při vytváření komponenty resp. jejím připojování k presenteru. Ke konfiguraci komponenty se používá metoda attached, která volá metodu configure, jež je překrytá v poděděné komponentě. Problém však je, když si do odděděné komponenty předávám instanci databáze. Musím volat konstruktor takto:


use NiftyGrid\NDataSource;
use NiftyGrid\Grid;

class GridControl extends Grid {

    /** @var Nette\Database\Table\Selection */
    private $table; 

    public function __construct(Nette\ComponentModel\IContainer $parent = NULL, $name = NULL, Nette\Database\Table\Selection $table)
    {
        $this->table = $table;
        parent::__construct($parent, $name);
    }

    protected function configure($presenter)
    {
        $dataSource = new NDataSource($this->table);

        .....

    }   

}

Instanci databáze musím přiřadit před voláním rodičovského konstruktoru, protože jinak dojde po zavolání parent::__construct($parent, $name); k zavolání attached a následném volání configure a zde ještě databáze není nastavena (nevrátil jsem se ještě z konstruktoru).

Této varianty konstruktoru využít musím, protože jinak je v metodě render vyhozena

Nette\InvalidArgumentException

Component with name 'columns' does not exist.

protože se ještě nezavolal attached.

Továrnička:

protected function createComponentGrid($name)
    {
        $table = $this->database->table('wm_licenses');

        $control = new GridControl($this, $name, $table);
        return $control;
    }
ghost commented 12 years ago

Vyřešeno, chyba není v Gridu.