Cakephp 2.0-动态填充选择框?

Cakephp 2.0-动态填充选择框?,cakephp,cakephp-2.0,Cakephp,Cakephp 2.0,我有一个模型:类别。任何类别都可以有子类别。该模型使用树行为(Cakephp 2.0)。我想创建一个带有两个选择框的表单。一个包含类别,另一个包含子类别。当我选择一个类别时,包含子类别的框应根据我的选择动态填充。例如,如果有类别体育、电影和子类别足球、篮球和喜剧、科幻如果我在第一个框中选择电影,则第二个框中应填充喜剧和科幻作为选项。四处搜索我找到了一个解决方案,但它不起作用 解决方案是表单中应该有一个脚本(Js),用于观察第一个框的状态。当它发生更改时,它会从控制器调用一个函数,在填充第二个框的

我有一个模型:类别。任何类别都可以有子类别。该模型使用树行为(Cakephp 2.0)。我想创建一个带有两个选择框的表单。一个包含类别,另一个包含子类别。当我选择一个类别时,包含子类别的框应根据我的选择动态填充。例如,如果有类别体育、电影和子类别足球、篮球和喜剧、科幻如果我在第一个框中选择电影,则第二个框中应填充喜剧和科幻作为选项。四处搜索我找到了一个解决方案,但它不起作用

解决方案是表单中应该有一个脚本(Js),用于观察第一个框的状态。当它发生更改时,它会从控制器调用一个函数,在填充第二个框的选项的元素中呈现结果

所以我做了什么

型号

<?php
class Category extends AppModel { 
var $name = 'Category';
var $actsAs = array('Tree'); 
} 
?> 
它应该查找表中具有所选选项的所有记录(这意味着它查找从第一个框中选择的类别的子类别)

元素(ajax\u下拉菜单)



我发现了错误。它需要一个回音

 echo $this->Js->get('#Category.id')->event(
'change', $this->Js->request(
 array('controller'=>'categories','action'=>'ajax_categories'),
 array('update' => '#Subcategory', 'dataExpression' => true, 'data'
        => '$("#Category.id").serialize()')
)
);

您还可以尝试使用writeBuffer,而不是回显每个Js方法结果
echo$this->Js->writeBuffer()
<?php foreach($options as $key => $val) { ?>
<option value="<?php echo $key; ?>"><?php echo $val; ?></option>
<?php } ?>
<?php
$this->Html->script('prototype', array('inline' => false));
echo $this->Form->create('Category');

echo $this->Form>input('Category.id',array('id'=>'Category.id','label'=>'Parent',
'empty' => '-- Pick a category --' ,'options' => $cats));

 echo $this->Form->input('Subcategory',array('id' =>
'Subcategory','label'=>'Subcategory', 'empty' => '-- Pick a subcategory --' ));

 echo $this->Form->input('name',array('label'=>'Name'));

 echo $this->Form->end('Add');

 $this->Js->get('#Category.id')->event(
'change', $this->Js->request(
    array('controller'=>'categories','action'=>'ajax_categories'),
    array('update' => '#Subcategory', 'dataExpression' => true, 'data'
            => '$("#Category.id").serialize()')
)
);
?>
 echo $this->Js->get('#Category.id')->event(
'change', $this->Js->request(
 array('controller'=>'categories','action'=>'ajax_categories'),
 array('update' => '#Subcategory', 'dataExpression' => true, 'data'
        => '$("#Category.id").serialize()')
)
);