0

YII フレームワークの拡張機能「EchMultiSelect」と「MultiModelForm」を組み合わせると、ちょっとした問題が発生します。

私がやろうとしているのは、要素の 1 つが EchMultiSelect ウィジェットである一連のフォーム要素をコピーすることです。

jqRelCopy ページのチュートリアルによると、要素のコピー (例では datePicker) を「jsAfterNewId」オプションに渡す必要があります。

'jsAfterNewId' => JQRelcopy::afterNewIdDatePicker($datePickerConfig),

だから、私はそれを次のように変更しようとしました:

'jsAfterNewId' => MultiModelForm::afterNewIdMultiSelect($memberFormConfig['elements']),

また、MultiModelForm.php に以下を追加しました。

public static function afterNewIdMultiSelect($element)
    {
            $options = isset($element['options']) ? $element['options'] : array();
            $jsOptions = CJavaScript::encode($options);
            return "if(this.attr('multiple')=='multiple'){this.multiselect(jQuery.extend({$jsOptions}));};";                
    }

Add Person リンクを使用しているときにコピーされ、適切に機能しますが、たとえば 3 つのアイテムを追加/複製し、3 番目のアイテムの複数選択オプションを変更すると、最初の複数選択ドロップダウンに反映されるだけで、これは他のものと同じです。また、[人を追加] リンクをクリックして新しい項目を追加し、同じ要素を新しい行項目に複製する場合も同様です。

フォーム構成変数とマルチモデル ウィジェット呼び出しのコードを次に示します。

//$userList=array of the userIds from users table
$memberFormConfig = array(
      'elements'=>array(
        'userId'=>array(
            'type'=>'ext.EchMultiSelect.EchMultiSelect',                
            'model' => $User,
            'dropDownAttribute' => 'userId', 
            'data' => $userList,
            'dropDownHtmlOptions'=> array(
                'style'=>'width:500px;',
            ),
        ),
        ...
        ...         
    ));

同じビュー ファイルから MultiModelForm ウィジェットを呼び出す

$this->widget('ext.multimodelform.MultiModelForm',array(
        'id' => 'id_member', //the unique widget id
        'formConfig' => $memberFormConfig, //the form configuration array
        'model' => $model, //instance of the form model
        'tableView' => true,
        'validatedItems' => $validatedMembers,
        'data' => Person::model()->findAll('userId=:userId', array(':userId'=>$model->id)),
        'addItemText' => 'Add Person',
        'showAddItemOnError' => false, //not allow add items when in validation error mode (default = true)
             'fieldsetWrapper' => array('tag' => 'div',
            'htmlOptions' => array('class' => 'view','style'=>'position:relative;background:#EFEFEF;')
        ),
        'removeLinkWrapper' => array('tag' => 'div',
            'htmlOptions' => array('style'=>'position:absolute; top:1em; right:1em;')
        ),

        'jsAfterNewId' => MultiModelForm::afterNewIdMultiSelect($memberFormConfig['elements']),
    ));

誰かがこれで私を助けてくれますか?

前もって感謝します!

4

1 に答える 1