2014-03-12 99 views
2

我已经在Yii开发者论坛发布了这个问题,但迄今为止还没有得到任何答复,所以我认为值得尝试在这里发布静默。Yii中Bootstrap Modal和Select2的问题

阅读了几个主题和博客文章后,我仍然在为这个问题而苦苦挣扎。

我在一个项目中,我的客户要我准备的应用程序能够使用可编辑网格的中间。出于这个原因,我包括引导和x-editable扩展。为了在网格中创建新记录,我使用了一个按钮,该按钮调用一个模式窗口,在该窗口中,我使用eselect2下拉菜单来渲染控制器/创建动作。

当我打电话给我的控制器/创建从浏览器操作它工作正常,并产生所有eselect2的下拉列表中,但是当我使之成为一个引导模式窗口,它生成简单的HTML选择。

,我读了THISIS现有问题与bootstarp和选择2,另外还有一些解决方法,但我不能让他们没有在所有的工作。

我在生成的HTML认识到,当视图被渲染到模式窗口的eselect2脚本不包含在HTML头部。我手动添加eselect2脚本到标题,但它没有解决我的问题。

有人可以帮忙吗?

请找兹我的代码:

在我的管理视图生成按钮来创建新的项目:

<?php $this->widget('bootstrap.widgets.TbButton', array(
    'label'=>'Új cikk rögzítése', 
    'type'=>'primary', // null, 'primary', 'info', 'success', 'warning', 'danger' or 'inverse' 
    'size'=>'normal', // null, 'large', 'small' or 'mini' 
    'htmlOptions'=>array(
     'data-toggle'=>'modal', 
     'data-target'=>'#myModal', 
     'href'=>$this->createUrl('cikk/create'), 
    ), 
)); ?> 

生成模式在我的管理视图

<?php $this->beginWidget('bootstrap.widgets.TbModal', array(
       'id'=>'myModal', 
       'options' => array(
           'backdrop' => 'static', 
           'keyboard' => true), 
     )); ?> 

<div class="modal-header"> 
    <a class="close" data-dismiss="modal">&times;</a> 
    <h4>Új cikk rögzítése</h4> 
</div> 

<div class="modal-body"> 
    <?php //echo $this->renderPartial('_form', array('model'=>$model),false, true); ?> 
</div> 

<div class="modal-footer"> 
    <?php $this->widget('bootstrap.widgets.TbButton', array(
     'type'=>'primary', 
     'label'=>'Adatok rögzítése', 
     'url'=>'', 
     'htmlOptions'=>array('onclick' => '$("#cikk-form").submit()'), 
    )); ?> 
    <?php $this->widget('bootstrap.widgets.TbButton', array(
     'label'=>'Mégsem', 
     'url'=>'#', 
     'htmlOptions'=>array('data-dismiss'=>'modal'), 
    )); ?> 
</div> 

<?php $this->endWidget(); ?> 

<script type="text/javascript"> 
$("a[data-toggle=modal]").click(function(){ 
    var target = $(this).attr('data-target'); 
    var url = $(this).attr('href'); 
    if(url){ 
     $(target).find(".modal-body").load(url); 
    }}); 

$(function(){$("#myModal").draggable().resizable();}); 

</script> 

我的_form视图呈现在模态窗口中:

<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
     'id'=>'cikk-form', 
     'type'=>'horizontal', 
     // Please note: When you enable ajax validation, make sure the corresponding 
     // controller action is handling ajax validation correctly. 
     // There is a call to performAjaxValidation() commented in generated controller code. 
     // See class documentation of CActiveForm for details on this. 
     'enableAjaxValidation'=>false, 
)); ?> 

     <p class="note">A <span class="required">*</span> -al jelölt mezők kitöltése kötelező.</p> 

     <?php echo $form->errorSummary($model); ?> 
<fieldset> 
     <?php echo $form->textFieldRow($model, 'megnevezes', array('class'=>'span3')); ?> 

     <?php echo $form->labelEx($model,'mertekegyseg'); ?> 
     <?php $this->widget('ext.select2.ESelect2', array(
       'model' => $model, 
       'attribute' => 'mertekegyseg', 
       'data' => Mertekegyseg::model()->getMertekegysegOptions(), 
        'htmlOptions'=>array('empty' => 'Válasszon mértékegységet!') 
      ));?> 
     <?php echo $form->error($model,'mertekegyseg'); ?> 

</fieldset> 
<?php $this->endWidget(); ?> 

SOLUTION:

我在这里复制解决你在下面的评论丢失之前。

在我的情况的问题是,我的一些JavaScript的纠结与其他脚本,这就是为什么选择2未正确放置。

我在_form视图应用Yii::app()->clientscript->scriptMap['*.js'] = false;和解决了我的问题。

大到agriboz帮助我追踪问题!

+0

总结,'当模式已被证明正确select2.js'不工作? – agriboz

+0

完全是这个问题。相反,模式加载正常的HTML选择。 – g0m3z

+0

控制台中是否有任何错误? – ineersa

回答

3
$('#myModal').on('shown.bs.modal', function (e) { 
    $('selector').select2(); 
}) 

模态显示后,您应该尝试运行select2

Thorough information.

+0

谢谢您响应!自从我离开键盘以来,我还没有时间检查这个问题,但很快就会回复您。 – g0m3z

+0

我无法使它工作。我在标题中加载了select2.js,并在上面添加了您的代码。在页面源代码中,我可以看到两个脚本在模式打开时加载,但不起作用。我的选择器的ID是Cikk_mertekegyseg,因此我添加了以下内容:'('shown.bs.modal',function(){'('#Cikk_mertekegyseg')。select2(); \t})' – g0m3z

+0

您是否尝试在浏览器控制台上运行'$('#Cikk_mertekegyseg')。select2();'? – agriboz