Autocomplete – volání až po zadání
- MW
- Člen | 626
Zdravím a prosím o radu,
používám našeptávač – autocomplete a rád bych jej v tomto případě upravil tak, aby začal tahat data (zavolala getAddress()) az při zadání. Nejsou to data z mojí databáze, ale z API, kde si nemůžu stáhnout rovnou všechny položky.
Jak toto řešit, prosím?
protected function createComponentForm() {
$form = $this->formFactory->create();
$form->addSelect('address', 'Adresa:', $this->getPresenter()->getAddress())
->setRequired('Zvolte položku')
->setPrompt('')
->setHtmlId('combobox');
$form->addSubmit("s", "Hledej");
$form->onSuccess[] = function (Form $form) {
$this->processForm($form, $form->getValues(TRUE));
};
return $form;
}
a presenter
public function getAddress($string) {
$formData = json_decode(file_get_contents($this->apiUrl . 'Adresy/Hledani?q=' . $string . '', false, $this->getContextForRequest()), false);
foreach ($formData as $fd) {
foreach($fd as $val) {
$formDataFinal[$fd->kod] = $fd->formatovanaAdresa;
}
}
return $formDataFinal;
}
- chap
- Člen | 81
Nastavením delay, případně minLength nestačí? Pak možno přidat button a onclick zobrazit ten autocomplete? … To přesně nevím jak, ale asi něco ve stylu inicializace autocomplete on button click, pritom mu nastavit focus … a autocomplete ma moznost zobrazeni pri tomto eventu http://stackoverflow.com/a/4132099
- MW
- Člen | 626
Momentálně mam toto, ale to funguje, když mu podstrčím všechna data najednou, což teď nějde.. jedná se o tahání dat z API.
Takže by mělo stačit jen upravit ten source a ještě něco ? Omlouvám se, ale s JS trochu bojuju :)
Nevím jak to správně propojit s tím $this->getPresenter()->getAddress()) a podstrčit mu nějaký string..
Četl jsem tady o Nextras/TypeAhead ale nenašel jsem bohužel jediný příklad.
Díky!
Editoval MW (19. 3. 2016 9:59)
- MW
- Člen | 626
Snažím se s tím hnout.
Našeptávač se objeví, když mu jako data dam nějaky var přímo ve scriptu.
Vše mě vrací to co ma, ale JS si nějak nebere ty data pokud jsou z handlu..
nebo je mám ve špatném formátu?
Kde může být problém prosím.. nebo na to jdu blbě? Moc díky!
Latte:
<script>
$(function () {
$("#inputTest").autocomplete({
source: "http://localhost/ikonis/cuzk/?do=getAddress",
minLength: 3,
delay: 1000,
autoFocus: true,
});
});
</script>
<div class="ui-widget">
<label for="inputTest">Test: </label>
<input id="inputTest">
</div>
Handle v presenteru:
public function handleGetAddress() {
$string = $this->getParameter('term');
If ($string) {
$formData = json_decode(file_get_contents($this->apiUrl . 'Adrs/Data?q=' . urlencode($string) . '', false, $this->getContextForRequest()), false);
$data = array();
foreach ($formData as $fd) {
foreach ($fd as $val) {
array_push($data, $fd->adresa);
}
}
return $data;
}
}
Handle vrací:
array(10) (
[0] => (string) Mostecká 20, Litvínov - Horní Litvínov, 436 01
[1] => (string) Mostecká 20, Litvínov - Horní Litvínov, 436 01
[2] => (string) Mostecká 20, Mariánské Radčice, 435 32
[3] => (string) Mostecká 20, Mariánské Radčice, 435 32
[4] => (string) Mostecká 80/20, Horní Jiřetín, 435 43
[5] => (string) Mostecká 80/20, Horní Jiřetín, 435 43
[6] => (string) Mostecká 45/20, Praha - Malá Strana, 118 00
[7] => (string) Mostecká 45/20, Praha - Malá Strana, 118 00
[8] => (string) Mostecká 2098/20, Teplice, 415 01
[9] => (string) Mostecká 2098/20, Teplice, 415 01
)\--