我有一个模特:分类。任何类别都可能有子类别。该模型使用树行为( Cakephp 2.0 )。我想创建一个带有两个选择框的表单。一个与类别,另一个与子类别。当我选择一个类别时,具有子类别的框应根据我的选择动态填充。例如,如果有类别体育,电影和子类别足球,篮球和喜剧,科幻如果我在第一个框中选择电影,第二个应填充喜剧和科幻作为选项。搜索我找到了解决方案,但它不起作用。
解决方案是在表单中应该是一个脚本(Js),它会观察第一个框的状态。当它改变时,它从控制器调用一个函数,将结果呈现在一个元素中,该元素填充第二个框的选项。
所以我做了什么。
模型
<?php
class Category extends AppModel {
var $name = 'Category';
var $actsAs = array('Tree');
}
?>
模型字段:id,parent_id,lft,rght,name
控制器 - 方法
function ajax_categories() {
$this->set('options',
$this->Category->find('list',
array(
'conditions' => array(
'Category.parent_id' => $_GET['data']['Category']['id']
)
)
)
);
$this->render('/elements/ajax_dropdown', 'ajax');
}
它应该找到表中所有具有父选择选项的记录(这意味着它找到从第一个框中选择的类别的子类别)
元素(ajax_dropdown)
<?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()')
)
);
?>
其中 $ cats 是包含类别的var。
问题是没有任何反应。当我选择一个类别时,第二个选择框为空。我已经包含了Js助手和RequestHandler,当然我加载了jquery脚本,输出了缓冲区(nappo提醒我)我做错了什么?
答案 0 :(得分:0)
我发现了错误。它需要回声
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()')
)
);