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']),
));
誰かがこれで私を助けてくれますか?
前もって感謝します!