我遇到了一些与扩展相关的问题" EchMultiSelect"和#34; MultiModelForm" YII框架。
我要做的是复制一组表单元素,其中一个元素是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选项然后它反映到第一个多选下拉列表时,会发生什么情况另外,当我通过点击Add Person链接添加新项目时,它将相同的元素克隆到新的行项目
这里是表单配置变量和多模型小部件调用的代码。
//$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']),
));
有人可以帮我这个吗?
提前致谢!
答案 0 :(得分:0)
经过长时间的搜索和googleing,我找到了解决方案,只需替换MultiModelForm.php中的函数:
public static function afterNewIdMultiSelect($element)
{
$options = isset($element['options']) ? $element['options'] : array();
$jsOptions = CJavaScript::encode($options);
return "if ( this.hasClass('test123456') )
{
var mmfComboBoxParent = this.parent();
// cloning autocomplete and select elements (without data and events)
var mmfComboBoxClone = this.clone();
var mmfComboSelectClone = this.prev().clone();
// removing old combobox
mmfComboBoxParent.empty();
// addind new cloden elements ()
mmfComboBoxParent.append(mmfComboSelectClone);
mmfComboBoxParent.append(mmfComboBoxClone);
// re-init autocomplete with default options
mmfComboBoxClone.multiselect(jQuery.extend({$jsOptions}));
}";
}
多数民众赞成...... !!
...谢谢!