- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 CGridview,它以特定的时间间隔刷新。排序、过滤和分页都是由ajax 完成的,并且运行良好。问题是 $.fn.yiiGridView.update 以特定的时间间隔更新网格,因此过滤器、排序、分页属性被重置为空,并且网格在每次刷新时显示第一页。
这是有问题的 View ,_productDataGrid.php
<?php
$this->widget('bootstrap.widgets.TbGridView', array(
'id' => 'realtime-gridAMZ',
'itemsCssClass' => 'table table-dark table-striped ',
'htmlOptions' => array(
'class' => 'product-datagrid',
),
'dataProvider' => $model->search(),
'filter' => $model,
'ajaxUpdate' => 'realtime-gridAMZ',
'ajaxUrl' => Yii::app()->createUrl('realTime/AjaxUpdate'),
'pager' => array(
'header' => '',
'cssFile' => false,
'maxButtonCount' => 10,
'selectedPageCssClass' => 'active',
'hiddenPageCssClass' => 'disabled',
'firstPageCssClass' => 'previous',
'lastPageCssClass' => 'next',
'firstPageLabel' => '<<',
'lastPageLabel' => '>>',
'prevPageLabel' => '<',
'nextPageLabel' => '>',
),
'summaryCssClass' => 'label label-warning',
'columns' => array(
'id',
'name',
'category',
'price'
'rating'
),
));
?>
这是主 index.php View ,它在页面加载时最初显示网格。
<div class="box span12" onTablet="span6" onDesktop="span12">
<div class="box-header">
<h2><i class="icon-list"></i><span class="break"></span>AMZ</h2>
<div class="box-icon">
<a href="#" class="btn-minimize"><i class="icon-chevron-up"></i></a>
<a href="#" class="btn-close"><i class="icon-remove"></i></a>
</div>
</div>
<div class="box-content">
<?php
$this->renderPartial('//realTime/_productDataGrid', array(
'model' => new RealTime(),
));
?>
</div>
</div><!--/span-->
</div>
<?php
$baseUrl = Yii::app()->baseUrl;
$cs = Yii::app()->getClientScript();
$cs->registerScriptFile($baseUrl . '/js/ajaxProductDataUpdate.js');
?>
这是设置计时器并调用网格更新函数的 jquery 文件。 ajaxProductDataUpdate.js
function updateAMZGrid() {
$.fn.yiiGridView.update('realtime-gridAMZ', {
data: $(this).serialize()
});
return false;
}
$(document).ready(function() {
setInterval(updateAMZGrid, 60000);
});
最后是 RealTimeController 中负责 ajax 渲染的 actionAjaxUpdate
public function actionAjaxUpdate() {
$dataProvider = new RealTime();
$dataProvider->unsetAttributes();
if (isset($_GET['RealTime']))
$dataProvider->attributes = $_GET['RealTime'];
$this->renderPartial('_producDataGrid', array(
'model' => $dataProvider,
));
}
现在,就像我上面提到的,所有功能都按预期工作。但是过滤器、排序、分页属性在每次调用 yiiGridViewUpdate 时都会被重置。例如,如果用户当前正在查看表格的第 24 页,则 1 分钟后网格将更新,并且他将被重定向到表格的首页或第 1 页。
与过滤器相同,假设用户输入搜索关键字,并且他正在查看结果,1分钟后他将再次看到表格的首页或第1页,并且过滤结果将消失。因此,1 分钟后,他必须再次在过滤框中输入搜索关键字。
现在,这对于任何通过网格浏览数据的人来说都是一个很大的障碍。
有谁知道这个问题的解决办法吗?请让我知道我应该做什么才能使其正常工作。我试图通过反复试验来修复它,但一无所获。
提前致谢,
麦克斯
最佳答案
麦克斯。我查看了为网格寻呼机生成的 JS 代码(当网格被 ajax 更新时):
jQuery('#assortment-grid').yiiGridView({'ajaxUpdate':['assortment-grid'],'ajaxVar':'ajax','pagerClass':'pager','loadingClass':'grid-view-loading','filterClass':'filters','tableClass':'items','selectableRows':1,'enableHistory':false,'updateSelector':'{page}, {sort}','filterSelector':'{filter}','pageVar':'Assortment_page'});
这个 js 可以发送 ajax 请求进行网格分页,如下所示:
http://srv50213.ht-test.ru/app2/index.php?Assortment[itemSearch]=31351134582, BMW 5 SERIES '85-95 ?28/32/34 FORD MONDEO&Assortment_page=5&ajax=assortment-grid&r=assortment/searchtool
在这个 uri 中有一些神奇的参数:
Assortment_page=5
分别。用于分页Assortment[itemSearch]=31351134582...
和 Assortment[subgroup]='ДЕТАЛИ КУЗОВА'
- 它们负责维护服务器端的过滤:
if (isset($_GET['realtime-gridAMZ']))
$dataProvider->attributes = $_GET['realtime-gridAMZ'];
ajax=assortment-grid
分别。用于指示ajax调用。
考虑到这些先决条件,您可能会尝试修改代码以在获取序列化数据时更新计时器上的网格。这里修改一些:
function updateAMZGrid() {
$.fn.yiiGridView.update('realtime-gridAMZ', {
data: $(this).serialize()
});
return false;
}
您可能想检查通过 $(this).serialize()
传递了哪些数据或添加一些内容。就像$('#realtime-gridAMZ').serialize()
。您如何检查 $_GET['realtime-gridAMZ_page']
并将其“复制/粘贴”到 ajax 请求中:
+ '&realtime-gridAMZ_page=' . $_GET['realtime-gridAMZ_page']
因此,您可以为重复请求获取当前数据。就我而言,它可以在没有ajax的情况下与juiAutoComplete一起很好地工作:
...
'select'=>'js:function(event, ui) {
$(this).val(ui.item.value);
location.href= "'. $this->createUrl($this->route) . '&Assortment[itemSearch]=" + ui.item.value + $("#uni-form").serialize() ;
}',
因此你可以尝试一下。类似于:
function updateAMZGrid() {
$.fn.yiiGridView.update('realtime-gridAMZ', {
data: $(this).serialize() + $('#realtime-gridAMZ').serialize() + + '&realtime-gridAMZ_page=" . $_GET['realtime-gridAMZ_page'] . "
});
...
return false;
还要检查服务器端是否正确获取 XHR 请求中的 GET 参数:
`if (isset($_GET['realtime-gridAMZ']))
$dataProvider->attributes = $_GET['realtime-gridAMZ'];`
为什么你有$dataProvider->attributes = $_GET['realtime-gridAMZ'];
,我通常将GET/POST参数获取到模型中,而不是DataProvider中:
`$model->attributes = $_GET['realtime-gridAMZ'];`
只有在那之后
`$dataProvider = $model->search();`
希望对您有帮助,如有不清楚的地方,请随时提问。不要忘记调试工具:F12 或 Ctrl+Shift+I
关于php - 面临 $.fn.yiigridview.update 、过滤器、排序、分页重置为空的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19509991/
我正在尝试使用谷歌浏览器的 Trace Event Profiling Tool分析我正在运行的 Node.js 应用程序。选择点样本后,我可以在三种 View 之间进行选择: 自上而下(树) 自上而
对于一个可能是菜鸟的问题,我们深表歉意,但尽管在 SO 上研究了大量教程和其他问题,但仍找不到答案。 我想做的很简单:显示一个包含大量数据库存储字符串的 Android ListView。我所说的“很
我已经开始了一个新元素的工作,并决定给 Foundation 5 一个 bash,看看它是什么样的。在创建带有水平字段的表单时,我在文档中注意到的第一件事是它们使用大量 div 来设置样式。所以我在下
我有一个 Windows 窗体用户控件,其中包含一个使用 BeginInvoke 委托(delegate)调用从单独线程更新的第 3 方图像显示控件。 在繁重的 CPU 负载下,UI 会锁定。当我附加
我有一堆严重依赖dom元素的JS代码。我目前使用的测试解决方案依赖于 Selenium ,但 AFAIK 无法正确评估 js 错误(addScript 错误不会导致您的测试失败,而 getEval 会
我正在制作一款基于滚动 2D map /图 block 的游戏。每个图 block (存储为图 block [21][11] - 每个 map 总共 231 个图 block )最多可以包含 21 个
考虑到以下情况,我是前端初学者: 某个 HTML 页面应该包含一个沉重的图像(例如 - 动画 gif),但我不想强制客户缓慢地等待它完全下载才能享受一个漂亮的页面,而是我更愿意给他看一个轻量级图像(例
我正在设计一个小软件,其中包括: 在互联网上获取资源, 一些用户交互(资源的快速编辑), 一些处理。 我想使用许多资源(它们都列在列表中)来这样做。每个都独立于其他。由于编辑部分很累,我想让用户(可能
我想比较两个理论场景。为了问题的目的,我简化了案例。但基本上它是您典型的生产者消费者场景。 (我关注的是消费者)。 我有一个很大的Queue dataQueue我必须将其传输给多个客户端。 那么让我们
我有一个二元分类问题,标签 0 和 1(少数)存在巨大不平衡。由于测试集带有标签 1 的行太少,因此我将训练测试设置为至少 70-30 或 60-40,因此仍然有重要的观察结果。由于我没有过多地衡量准
我是一名优秀的程序员,十分优秀!