如何将multiselform与echmultiselect yii集成?
我在结合扩展“EchMultiSelect”和YII框架的“multiselform”时遇到了一点小麻烦 我要做的是复制一组表单元素,其中一个元素是一个多选择小部件 根据jqRelCopy页面上的教程,我需要将元素的副本(在他们的示例中为datePicker)传递给“jsAfterNewId”选项:如何将multiselform与echmultiselect yii集成?,yii,multi-model-forms,Yii,Multi Model Forms,我在结合扩展“EchMultiSelect”和YII框架的“multiselform”时遇到了一点小麻烦 我要做的是复制一组表单元素,其中一个元素是一个多选择小部件 根据jqRelCopy页面上的教程,我需要将元素的副本(在他们的示例中为datePicker)传递给“jsAfterNewId”选项: 'jsAfterNewId' => JQRelcopy::afterNewIdDatePicker($datePickerConfig), 因此,我尝试将其修改为: 'jsAfterNewI
'jsAfterNewId' => JQRelcopy::afterNewIdDatePicker($datePickerConfig),
因此,我尝试将其修改为:
'jsAfterNewId' => MultiModelForm::afterNewIdMultiSelect($memberFormConfig['elements']),
在这里,我还将以下内容添加到multipleform.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}));};";
}
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}));
}";
}
当我使用Add Person链接时,它被复制并正常工作,但是如果我添加/克隆三个项目,例如,当我更改第三个项目MultiHelp选项时,它会反映到第一个multiselect下拉列表中,只有其他项目是一样的,当我通过单击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;',
),
),
...
...
));
从同一视图文件调用多模式小部件
$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']),
));
有人能帮我吗
提前谢谢 经过长时间的搜索和谷歌搜索,我找到了解决方案,只需替换multipleform.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}));};";
}
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}));
}";
}
就这样
谢谢