2015-02-11 50 views
0

我使用CakePHP的2.6.1的CakePHP的js助手 - 更新3個下拉菜單動態

我有一個CakePHP的形式來處理這些3下拉menues訪問: 位置 - > facility->部門

我想他們是動態的人口,所以我跟着這個教程http://marnienickelson.com/2014/10/11/dynamic-dropdowns-with-cakephp-2-x/

它運作良好,除了一個小問題。如果我改變了「位置」,在「設備」下拉菜單中填寫正確,但「部門」菜單保持空白......

我AccessesController.php

public function add() { 
    if ($this->request->is('post')) { 
     $this->Access->create(); 
     if ($this->Access->save($this->request->data)) { 
      $this->Session->setFlash(__('The access has been saved.')); 
      return $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash(__('The access could not be saved. Please, try again.')); 
     } 
    } 
    $titles = $this->Access->Title->find('list'); 
    $locations = $this->Access->Facility->Location->find('list'); 
    $systems = $this->Access->System->find('list'); 
    $this->set(compact('titles', 'locations', 'facilities', 'departments', 'systems')); 
} 

我get_by_location.ctp(和我有一個名爲get_by_facility.ctp)

<?php foreach ($facilities as $key => $value): ?> 
<option value="<?php echo $key; ?>"><?php echo $value; ?></option> 
<?php endforeach; ?> 

我add.ctp結束相等文件和

<?php 
$this->Js->get('#AccessLocationId')->event('change', 
$this->Js->request(array(
    'controller'=>'facilities', 
    'action'=>'getByLocation' 
    ), array(
    'update'=>'#AccessFacilityId', 
    'async' => true, 
    'method' => 'post', 
    'dataExpression'=>true, 
    'data'=> $this->Js->serializeForm(array(
    'isForm' => true, 
    'inline' => true 
    )) 
    )) 
); 

$this->Js->get('#AccessFacilityId')->event('change', 
$this->Js->request(array(
    'controller'=>'departments', 
    'action'=>'getByFacility' 
    ), array(
    'update'=>'#AccessDepartmentId', 
    'async' => true, 
    'method' => 'post', 
    'dataExpression'=>true, 
    'data'=> $this->Js->serializeForm(array(
    'isForm' => true, 
    'inline' => true 
    )) 
    )) 
); 

?>

我知道第二event'change」心不是承認和這就是爲什麼我的第三下拉留空白......是否有其他事件再‘變’?或者我可以把這兩個Ajax請求放在一個嗎?

+0

你必須把兩者於一身,兩個請求於一體。 – 2015-02-16 11:14:23

+0

好吧,我可以把請求放在一起,但然後Js-> get只是尋找LocationID? Cakephp Docs說:_將內部'selection'設置爲一個CSS選擇器。活動選擇用於後續操作,直到做出新選擇_我必須觀看LocationID和FacilityID – joshed1985 2015-02-16 16:22:04

回答

0

這個博客幫我很多Euromarks blog

我只是改變了我的get_by_location.ctp文件:

<?php 
if (!empty($facilities)) { 
    echo '<option value="">' . __('pleaseSelect') . '</option>'; 
    foreach ($facilities as $k => $v) { 
     echo '<option value="' . $k . '">' . h($v) . '</option>'; 
    } 
} else { 
    echo '<option value="0">' . __('noOptionAvailable') . '</option>'; 
} 

因此,如果第一個下拉被改變,第二個會顯示「請」。