Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将multiselform与echmultiselect yii集成?_Yii_Multi Model Forms - Fatal编程技术网

如何将multiselform与echmultiselect yii集成?

如何将multiselform与echmultiselect yii集成?,yii,multi-model-forms,Yii,Multi Model Forms,我在结合扩展“EchMultiSelect”和YII框架的“multiselform”时遇到了一点小麻烦 我要做的是复制一组表单元素,其中一个元素是一个多选择小部件 根据jqRelCopy页面上的教程,我需要将元素的副本(在他们的示例中为datePicker)传递给“jsAfterNewId”选项: 'jsAfterNewId' => JQRelcopy::afterNewIdDatePicker($datePickerConfig), 因此,我尝试将其修改为: 'jsAfterNewI

我在结合扩展“EchMultiSelect”和YII框架的“multiselform”时遇到了一点小麻烦

我要做的是复制一组表单元素,其中一个元素是一个多选择小部件

根据jqRelCopy页面上的教程,我需要将元素的副本(在他们的示例中为datePicker)传递给“jsAfterNewId”选项:

'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}));
        }";
}
就这样

谢谢