cmultipileupload';t在CJuiDialog小部件Yii中工作
我使用带有ajaxlink的CJuiDialog小部件作为弹出窗体。它工作得很好 但是现在我需要从弹出式表单上传多个文件。。所以我使用CMultiFileUpload作为上传选项,但我的行为就像一个普通的单文件按钮。。请帮我解决这个问题。。这是我的密码:cmultipileupload';t在CJuiDialog小部件Yii中工作,yii,cjuidialog,cmultifileupload,Yii,Cjuidialog,Cmultifileupload,我使用带有ajaxlink的CJuiDialog小部件作为弹出窗体。它工作得很好 但是现在我需要从弹出式表单上传多个文件。。所以我使用CMultiFileUpload作为上传选项,但我的行为就像一个普通的单文件按钮。。请帮我解决这个问题。。这是我的密码: <?php echo CHtml::ajaxLink(Yii::t('image','Upload'),array('gallery/create'),array( 'success'=>'js:function(data
<?php echo CHtml::ajaxLink(Yii::t('image','Upload'),array('gallery/create'),array(
'success'=>'js:function(data){
$("#gallery-form").dialog("open");
document.getElementById("add_images").innerHTML=data;}'));
$this->beginWidget('zii.widgets.jui.CJuiDialog',array(
'id'=>'gallery-form',
'options'=>array(
'title'=>Yii::t('image','Upload'),
'autoOpen'=>false,
'model'=>'true',
'width'=>'auto',
'height'=>'auto',
),
));
echo "<div id='add_images'></div>";
$this->endWidget('zii.widgets.jui.CJuiDialog'); ?>
这是我的渲染部分视图文件,可以在不使用cjuidialog调用的情况下使用multiupload文件,但是当我使用cjuidialog调用它时,它只支持单个文件上载。请帮助
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'gallery-form',
'enableAjaxValidation'=>true,
'htmlOptions' => array(
'enctype' => 'multipart/form-data',),
)); ?>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'image'); ?>
<?php
$this->widget('CMultiFileUpload', array(
'model'=>$model,
'name'=>'image',
'attribute'=>'image',
'accept'=>'jpg|gif|png',
));
?>
<?php echo $form->error($model,'image'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Upload' : 'Save'); ?>
</div>
<?php $this->endWidget(); ?>
默认情况下,renderPartial不加载脚本,并且CMultiFileUpload小部件使用脚本,因此需要生成renderPartial加载脚本。可以通过更改renderPartial以包含两个额外参数来实现此目的:
$this->renderPartial('viewName',
array('variable' => $variable), false, true
);
注意末尾添加的false、true
?false表示“不返回视图,显示它”,true表示“后处理”,这将添加脚本
有关更多信息:
[编辑]
下面是加载对话框的另一种方式。它仍然需要renderPartial中的“false,true”:
Yii::app()->clientScript->registerScript('uploadDialog', "
$(function(){
$('#upload-image').click(function(){
$('#gallery-form').load('".Yii::app()->createUrl('gallery/create')."', function(){
$('#gallery-form').dialog('open');
});
return false;
});
});");
echo CHtml::link('Upload', '#', array('id' => 'upload-image'));
$this->beginWidget('zii.widgets.jui.CJuiDialog',array(
'id'=>'gallery-form',
'options'=>array(
'title'=>Yii::t('image','Upload'),
'autoOpen'=>false,
'model'=>'true',
'width'=>'auto',
'height'=>'auto',
),
));
$this->endWidget('zii.widgets.jui.CJuiDialog');
然后,从控制器中删除以下行:
Yii::app()->clientScript->scriptMap['jquery.js'] = false;
如果这仍然不起作用,我建议您直接在CJuiDialog小部件标记之间添加渲染部分,而不是通过ajax加载内容。您现在可能已经找到了答案(我认为我们处于非常不同的时区),但如果没有,我为您提供了另一种尝试方法。它仍然通过ajax加载对话框内容,只需使用单击事件而不是ajaxLink。我已经对它进行了测试,它对我起到了作用。在上述解决方案中发现了一个小错误。如果我关闭JuiDialoge并重新打开对话框,则会出现这种情况。
TypeError:$.fn.MultiFile.intercepted[method]是未定义的值=$.fn.MultiFile.intercepted[method]。apply(这是参数)对不起,我忘了告诉你一个步骤。您还需要删除以下行:Yii::app()->clientScript->scriptMap['jquery.js']=false;这就是我所说的完美解决方案。非常感谢,弗罗斯蒂:)
Yii::app()->clientScript->scriptMap['jquery.js'] = false;