jquery - Yii CWidget - 依赖下拉菜单

标签 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')

但是它仍然没有解决我的问题,因为它没有引用小部件位置,而是引用 Controller 文件夹。

问题 1:如何让我的 ajax 从我的 CWidget 中调用方法?

问题 2:我使用小部件是因为我希望此表单在多个页面上可用。我应该创建一个部分 View 吗???如果是这样,如何将另一个 Controller 所需的数据传递到部分 View 中?

糟糕的解决方案/解决方法:我通过在 Controller 文件夹中创建 AjaxController 使小部件正常工作。对此解决方案不太满意,因为它不是很简洁。

有更好的解决方案吗?

最佳答案

我建议您了解一下 CCaptcha 小部件的工作原理。

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

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

  1. 创建一个扩展 CActionDependentDropDownAction 类。它应该负责处理您的 AJAX 请求。
  2. 在 Controller 中配置 actions() 方法,以将该操作类用作 dependentdropdown
  3. 在 DependentDropdownWidget 类中,配置 public $action='dependentdropdown' 属性
  4. 当您在小部件中为 ajax 配置渲染 CHtml::dropDownList() 时,请执行类似 'url' => $this->getController()->createUrl( $this->action)
  5. 用您的实现逻辑填充这些类,然后从您的 View 中调用您的小部件

关于jquery - Yii CWidget - 依赖下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16440695/

相关文章:

javascript - 获取最近类(class)的id值

javascript - 离开未保存表单的页面时发出警报( typescript )

php - 如何根据我的要求进行 "INNER JOIN"sql查询

javascript - 正则表达式 - 12/22

php - YII:如何在不调用小部件的情况下注册 yiiwheels 小部件 Assets

javascript - 如何将分离的 li 元素添加到 ul 列表

Yii 框架 : Register CSS After Publishing Asset Folder

php - Yii框架未定义偏移: 0

php - 日期在数据库中显示为 "1969-12-31"