Datagrid v „ajax“ módu nefunguje

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

Nette: 0.9.2
DataGrid: 0.9.2
PHP: 5.2.12

Ahoj všichni, implementuji grid v aplikaci a mám problém. Pokud neincluduju JS knihovny pro podporu ajaxu, grid funguje normálně (řazení, stránkování), jakmile připojím js knihovny, tak aby fungoval ajax, grid přestane fungovat. Data se zobrazí ale stránkování atd nejde, požadavek se sice odešle (viz přechod na 2 stránku)
?grid-goto=2&grid-itemsPerPage=20&do=grid-page

zavolá se handleGoto, správně se nastaví, že má být stránka č. 2 ale výsledný dotaz se již nevykoná (dotaz na počet řádků v tabulce ještě jo)

Presenter:

<?php
    protected function createComponentGrid($name) {
        $grid = new DataGrid;
        $model = new SPUser;
        $grid->bindDataTable($model->getDataSource());
        $grid->addColumn('NAME', 'Name');
        return $grid;
    }
?>

Model:

<?php
   public function getDataSource() {
        return $this->connection->select('*')
                                ->from('users')
                                ->toDataSource();
    }
?>

Template:
@{control grid}

používám dibi firebird.php.

Díky, Michal

Editoval wotaen (12. 1. 2010 15:33)

Jakub Šulák
Člen | 222
+
0
-

Nette je podporováno od verze 5.2.0 – problém může být v tvé verzi 5.1.12

je to jen tip

wotaen
Člen | 82
+
0
-

Jakub Šulák napsal(a):

Nette je podporováno od verze 5.2.0 – problém může být v tvé verzi 5.1.12

je to jen tip

Kurňa sorry, upsal jsem se je to 5.2.12

romansklenar
Člen | 655
+
0
-

U firebirdu je problém, že nepodporuje seekování, proto je třeba podědit a přepsat si metodu getRows() tak aby data rovnou fetchnula.

	/**
	 * Iterates over datagrid rows.
	 * @return ArrayIterator
	 */
	public function getRows() {
		$arr = $this->dataSource->fetchAll();
		$rows = new ArrayObject($arr);
		return $rows->getIterator();
	}
wotaen
Člen | 82
+
0
-

Tak pánové omlouvám se všem, projekt jsem si zkopíroval ze starého a stále jsem používal starý layout mode. Po nastavení

<?php
public $oldLayoutMode = FALSE;
?>

vše valí jak má

Roman: dík za poznámku, bude se hodit