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 に答える