我正在尝试创建一个带依赖下拉框的小部件。
以下教程:http://www.yiiframework.com/wiki/24,我遇到了ajax部分的以下问题:
echo CHtml::dropDownList('metal_id', 'id', $metals, array(
'ajax' => array(
'type' => 'POST', //request type
'url' => CController::createUrl('currentController/dynamiccities'),
'update' => '#product_id',
)
));
使用CController是不可能的,因为我在CWidget内,而不是CController。
但我可以使用类似的东西:
'url' => $this->getController()->createUrl('currentController/dynamicProducts')
然而,它仍然无法解决我的问题,因为它不会引用窗口小部件位置,而是控制器文件夹。
问题1:如何让我的ajax从我的CWidget中调用方法?
问题2:我正在使用小部件,因为我希望此表单可在多个页面上使用。我应该创建局部视图而不是???如果是这样,我如何将另一个控制器所需的数据传递到局部视图?
POOR解决方案/解决方法:我通过在Controllers文件夹中创建AjaxController来使小部件正常工作。对这个解决方案不太满意,因为它不是很整洁。
对此有更好的解决方案吗?
答案 0 :(得分:0)
我建议你看看CCaptcha小工具是如何工作的。
如果您创建一个新的Yii应用程序,默认情况下它将在site / contact.php视图中设置。
以下是我将遵循的一般步骤:
DependentDropDownAction
的班级CAction
。它应该处理你的AJAX请求。actions()
方法,将该操作类用作dependentdropdown
public $action='dependentdropdown'
属性CHtml::dropDownList()
时,请执行'url' => $this->getController()->createUrl($this->action)
答案 1 :(得分:0)
尝试使用绝对网址,如图所示
$this->createAbsoluteUrl('currentController/dynamicProducts');
答案 2 :(得分:0)
试试这个:
'url' => Yii::app()->createAbsoluteUrl('currentController/dynamiccities'),