Jak na dynamicke generovani linku v komponente
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- jakub.barta
- Člen | 10
Resim nasledujici problem – mam komponentu, ve ktere potrebuju filtrovat
DB polozky podle uzivatelem zadaneho filtru. Toto filtrovani probiha AJAXove,
pomoci JS se ziskaji hodnoty uzivatelskeho filteru a nyni potrebuju filtr poslat
komponente jako signal. Problem je ten, ze v sablone mam link vygenerovany
„natvrdo“, zatimco bych jej potreboval generovat dynamicky v zavislosti na
zadanem filtru.
Pro ilustraci nasleduje cast komponenty a sablona:
public class ClientFilter extends Control {
public function handleGetClients(array $filter) {
$clients = array();
foreach ($this->client_facade->getClientsByBookingFilter($filter["name"], $filter["phone"], $filter["email"]) as $client) {
$clients[] = array("id" => $client->id, "name" => $client->fullName." - ".$client->phone);
}
$this->presenter->sendJson(array("clients" => $clients));
}
}
js v latte sablone:
<script>
var base_link = {link getClients!, filter => [name => "__replace_name__", email => "__replace_email__", phone => "__replace_phone__"]};
$(filter).change(function(){
base_link = base_link.replace("__replace_name__", $("input#"+name_id).val());
base_link = base_link.replace("__replace_email__", $("input#"+email_id).val());
base_link = base_link.replace("__replace_phone__", $("input#"+phone_id).val());
$.ajax({
"url": base_link,
"method": "get"
})// dalsi zpracovani
});
</script>
Zatim teda pouzivam placeholdery __replace_name__ atd a pak je v zavislosti
na filteru nahrazuju, tenhle zpusob se mi ale nelibi a asi nebude uplne
koser.
Jak to resite vy? Mate nejaky best-practice?
Diky za odpovedi