我在结合 YII 框架的扩展“EchMultiSelect”和“MultiModelForm”时遇到了一点问题。
我想要做的是复制一组表单元素,其中一个元素是 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 链接时,它被复制并正常工作,但是如果我添加/克隆三个项目,例如,当我更改第三个项目 multiselct 选项时,它会反映到第一个多选下拉列表,这对于其他也是相同的同样,当我通过单击“添加人员”链接添加新项目时,它会将相同的元素克隆到新的行项目
这是表单配置变量和多模型小部件调用的代码。
//$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']),
));
有人可以帮我吗?
提前致谢!