【问题标题】:how to integrate multimodelform with echmultiselect yii?如何将 multimodelform 与 echmultiselect yii 集成?
【发布时间】:2015-03-19 12:21:15
【问题描述】:

我在结合 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']),
    ));

有人可以帮我解决这个问题吗?

提前致谢!

【问题讨论】:

    标签: yii multi-model-forms


    【解决方案1】:

    经过长时间的搜索和谷歌搜索,我找到了解决方案,只需替换 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}));
            }";
    }
    

    就是这样……!!

    谢谢...!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多