javascript - 在 Yii 中使用 RenderPartial 创建模态搜索

标签 javascript php ajax twitter-bootstrap yii

我正在尝试创建一个模式框,允许用户过滤和搜索网格。这样用户就可以在另一个数据库中查找信息,同时填写另一个数据库的表格。

我可以很好地创建模态,但问题在于渲染。

目前_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/

相关文章:

JSON 的 Javascript 表单序列化

javascript - PHP REST 服务器 - AJAX - JSON

php - 如何在我的mysql数据库中获取planet-latest.osm.bz2?

php - 更改azure php webrole上的文档根目录

javascript - 如何在动态弹出文本框中发布值

javascript - 如何获得自动换色?

jquery - 使用 Ajax/jQuery 从 CouchDB 读取连续源

javascript - 从 node.js shell 获取我的操作系统

javascript - 内联 Jquery 时间选择器

javascript - 在 angularjs Controller 的默认名称前加上一个名称