[ZF] Form Ajax
Ik heb een form gemaakt met Zend (1.11)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
$project = new Zend_Form_Element_Select('project');
$project->setLabel('Project')->setAttribs(array('style' => 'display: none;'))->class="small";
foreach($projectList as $projectItem)
{
$project->addMultiOption($projectItem->id, $projectItem->flowName);
}
$this->addElement($project);
$subField = new Zend_Form_Element_Text('subField');
$subField->setLabel('SubTaak')->setAttribs(array('style' => 'display:none;'))->id="subField";
$subField->class="small";
$this->addElement($subField);
$project->setLabel('Project')->setAttribs(array('style' => 'display: none;'))->class="small";
foreach($projectList as $projectItem)
{
$project->addMultiOption($projectItem->id, $projectItem->flowName);
}
$this->addElement($project);
$subField = new Zend_Form_Element_Text('subField');
$subField->setLabel('SubTaak')->setAttribs(array('style' => 'display:none;'))->id="subField";
$subField->class="small";
$this->addElement($subField);
Wat ik nou eigenlijk wil is dat subtaak zichtbaar wordt zosnel project geselecteerd is. Tot hier geen problemen. Alleen, nu wil ook nog dat subtaak gevuld wordt met de subtaken van het geselecteerde project.
Iemand enig idee?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$('select.project').change(function() {
var projectid = $('option:selected', this).val();
$.getJSON('/controller/action-naar-projecten/projectid/' + projectid, function(data) {
$('#subField').append('<option val=".." /></option>');
});
});
var projectid = $('option:selected', this).val();
$.getJSON('/controller/action-naar-projecten/projectid/' + projectid, function(data) {
$('#subField').append('<option val=".." /></option>');
});
});
Iets in die trend?
Alleen dan de AJAX request buiten het event halen, anders wordt er per change weer een HTTP request uitgevoerd...
Je kunt ook het complete select 'ding' laten tekenen in een action met alle opties bijv:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
public function action-naar-projecten() {
$this->getHelper('layout')->disableLayout(true);
$this->getHelper('viewRenderer')->setNoRender(true);
$projectId = $this->_getParam('projectid');
$taks = $ormDing->getAllTasks($projectid);
$form = new Chi_Lion_Form();
$subTaks = $form->subField;
foreach($tasks as $task) {
$subTaks->addMultiOption($task['name'], $task['taskid']);
}
echo $subField->render();
}
?>
public function action-naar-projecten() {
$this->getHelper('layout')->disableLayout(true);
$this->getHelper('viewRenderer')->setNoRender(true);
$projectId = $this->_getParam('projectid');
$taks = $ormDing->getAllTasks($projectid);
$form = new Chi_Lion_Form();
$subTaks = $form->subField;
foreach($tasks as $task) {
$subTaks->addMultiOption($task['name'], $task['taskid']);
}
echo $subField->render();
}
?>
Ik heb even geen rekening gehouden met naming conventions etc maar probeer je een idee te geven. Dit is wel minder efficiënt omdat je dan voor elke onchange een nieuwe selectbox gaat tekenen maar als het voor backend is en alle tasks cached in memcache/apc ofzo dan moet het wel goed te doen zijn denk ik.
Grr.