Yii CWidget - 依赖下拉列表

时间:2013-05-08 12:28:11

标签: jquery yii yii-widgets

我正在尝试创建一个带依赖下拉框的小部件。

以下教程: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来使小部件正常工作。对这个解决方案不太满意,因为它不是很整洁。

对此有更好的解决方案吗?

3 个答案:

答案 0 :(得分:0)

我建议你看看CCaptcha小工具是如何工作的。

如果您创建一个新的Yii应用程序,默认情况下它将在site / contact.php视图中设置。

以下是我将遵循的一般步骤:

  1. 创建一个扩展DependentDropDownAction的班级CAction。它应该处理你的AJAX请求。
  2. 在控制器中配置actions()方法,将该操作类用作dependentdropdown
  3. 在您的DependentDropdownWidget类中,配置public $action='dependentdropdown'属性
  4. 在您的小部件中为您的ajax配置呈现CHtml::dropDownList()时,请执行'url' => $this->getController()->createUrl($this->action)
  5. 之类的操作
  6. 使用您的实施逻辑填写这些类,然后在您的视图中调用您的小部件

答案 1 :(得分:0)

尝试使用绝对网址,如图所示

$this->createAbsoluteUrl('currentController/dynamicProducts');

答案 2 :(得分:0)

试试这个:

'url' => Yii::app()->createAbsoluteUrl('currentController/dynamiccities'),
相关问题