2
 echo CHtml::ajaxButton (Yii::t('Listing.Listing','Associa'), 
                    $this->createUrl('listing/addAssociation', array("id" => $model->id, "itemId"=> '5'  ) ), 
                    array('update' => '#dataToUpdate')
                    );

我正在使用这个示例代码(并且它正在工作),将一个 id 和一个 itemId(在示例中固定为“5”)发送到 addAssociation。

一切正常,但我需要为 itemId 传递 jQuery 表达式的结果。就像是

"itemId" = "js: $('#myDropDown option:selected').val();"

但在这种情况下,不评估 js 表达式,并且在 actionAddAssociation 中我看到 itemId 是文字字符串:

 "js: $('#myDropDown option:selected').val();"

如何允许用户选择一个组合,并将所选值传递给基于此操作的操作?

4

2 回答 2

4

您必须在ajax 选项的data属性中传递它:

echo CHtml::ajaxButton (Yii::t('Listing.Listing','Associa'), 
    $this->createUrl('listing/addAssociation', array("id" => $model->id)), 
    array(// these are ajax options
        'data' => array('itemId'=> 'js: $("#myDropDown option:selected").val()'),
              // and don't use semi-colon after val(), you can also pass id here itself
        'update' => '#dataToUpdate'
    )
);
于 2012-11-15T19:54:07.790 回答
0

您可以尝试使用 jQuery 的ajaxPrefilter添加一个函数,该函数将更改通过 ajax 传递的数据。

首先,您必须在页面初始化时注册以下脚本:

jQuery.ajaxPrefilter(function(options, originalOptions, jqXHR) {
    if (originalOptions['data'] && originalOptions['data']['requestId'] === "myDropDown") {
        delete originalOptions['data']['requestId'];
        originalOptions['data']['itemId'] = jQuery("#myDropDown option:selected").val();
        options['data'] = jQuery.param(originalOptions['data']);
    }
});

这是为jQuery.ajax()options确定的完整settings对象。我传递了一个附加参数来识别 ajax 请求,为了使事情更简单,视图可能如下所示:requestId

<?php
print CHtml::dropDownList("myDropDown", 1, array(
    1 => "First",
    2 => "Second",
    3 => "Third"
));
print CHtml::ajaxButton(Yii::t("Listing.Listing", "Associa"), Yii::app()->createUrl("listing/addAssociation"), array(
    'data' => array(
        'requestId' => "myDropDown",
        'id' => $model->id
    ),
    'update' => "#dataToUpdate"
));
于 2012-11-15T19:19:31.147 回答