我正在尝试创建一个模式框,允许用户过滤和搜索网格。这样用户就可以在另一个数据库中查找信息,同时填写另一个数据库的表格。
我可以很好地创建模态,但问题在于渲染。
目前_form.php中模态框内的代码如下:
echo $this->renderPartial('/students/_find', array('model'=>Students::model()));
这很好,并且可以很好地渲染网格。 _find.php如下:
<?php
$this->widget('bootstrap.widgets.TbExtendedGridView',array(
'id'=>'students-grid',
'type' => 'striped bordered',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns' => array(
array('name'=>'studentname', 'header'=>'Name'),
array('name'=>'studentgender', 'header'=>'Gender'),
array('name'=>'studentyear', 'header'=>'Year Group'),
array('name'=>'studenthouse', 'header'=>'House'),
),
)); ?>
但是,在该网格内搜索没有任何作用。我可以单击标题并进行排序,但在标题下的搜索框中键入内容不会执行任何操作。 JS 中不会产生任何错误,并且微调器出现一会儿然后消失,但没有发生实际的过滤。
将 _form 中的行更改为:
echo $this->renderPartial('/students/_find', array('model'=>Students::model()),false,true);
有所作为。我注意到的第一件事是 _form 的 JS 被破坏了,因为我在 _form 中使用了 Select2,并且它们没有加载(TypeError: jQuery(...).select2 is not a function
)。当我打开模式(使网格呈现良好)并搜索时,微调器只是继续旋转,什么也没有发生。
检查控制台,我看到以下错误:
too much recursion
Chrome 更有帮助:
Uncaught RangeError: Maximum call stack size exceeded
将 Yii::app()->clientscript->scriptMap['*.js'] = false;
添加到模式中只会摆脱所有 JS。然而,查看网络跟踪,看起来我的 JS 确实被调用了两次。所以看来可能是脚本冲突
下一步是将其编写为小部件,但我不确定如何做到这一点。也许 AJAX 是可行的方法,但我不确定如何继续。
最佳答案
尝试更改为
echo $this->renderPartial('/students/_find', array( 'model'=>new Students('search') ));
关于javascript - 在 Yii 中使用 RenderPartial 创建模态搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25126392/