Pole v komponentě a přístup z handlerů

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

Ahoj,

asi už jsem úplně mimo, ale co dělám špatně?

class MyControl extends UI\Control
{
	private $array;

	public function handleAdd(){
		$file = $_FILES['file'];
		$key = Strings::webalize($file['name']);

		$this->array[$key] = $file;
	}

	public function handleRemove($key){
		unset($this->array[$key]);
	}
}

handlery potom volám ze šablony komponenty ajaxem, ale při volání remove! mi prostě napíše, že ten prvek v poli neni..

Editoval kleinpetr (20. 11. 2015 13:12)

Michal Hlávka
Člen | 190
+
0
-

Ahoj, protože když voláš signál Add a Remove, načte se komponenta vždy separátně. Musíš si to pole persistentně uložit, dejme tomu třeba do session storage Nette\Http\Session

kleinpetr
Člen | 480
+
0
-

Nojo, nedošlo mi, že se nepracuje stále s jednou instancí.. Ještě bych se chtěl zeptat, když bych chtěl předat v komponentě v handleru pouze json, tak jake jsou rozdily mezi ->sendPayload; ->sendResponse; ->sendJson; ??

Michal Hlávka
Člen | 190
+
0
-

Payload už máš předdefinovaný objekt, který plníš hodnotami ve stylu $this->payload->nejakejJsonKlic = hodnotaKlice a při zavolání metody sendPayload vezme ten objekt, dá ho do Json formátu a ten ti pak vrátí server. Pokud by jsi chtěl mít plnou kontrolu nad tím, co ti vrací server, v našem případě plnou kontrolu nad Json formátem, tak se používá sendResponse, kde ti vrátí server co prostě chceš.

$this->sendResponse(new JsonResponse(['nejakejJsonKlic' => 'hodnotaKlice'])

vs

$this->payload->nejakejJsonKlic = 'hodnotaKlice';
$this->sendPayload();

Editoval emptywall (20. 11. 2015 14:13)

Michal Hlávka
Člen | 190
+
0
-

if (!$this->presenter->isAjax()) { $array = []; }

Koukám, že jsi otázku smazal, odpověď ti tady ale nechám. :-)

Editoval emptywall (20. 11. 2015 14:40)