【发布时间】:2014-05-21 18:26:51
【问题描述】:
我正在测试 ATK4 以决定是否可以使用它。其中一个场景是组和成员的状态页面,它应该自动重新加载包含动态组和成员信息的网格。
我已经实现的网格重新加载,如本线程 Agile toolkit : how to automatically reload grid 中所述
这是会员页面的代码:
<?php
class page_members extends Page {
function init(){
parent::init();
$page = $this;
$page->api->stickyGET('group_id');
$grid = $page->add('Grid');
$model = $grid->setModel('Member');
if ($_GET['group_id'])
$model->addCondition('group_id', $_GET['group_id']);
$page->js(true)->univ()->setInterval(
$grid->js()->reload()->_enclose()
,10000);
}
}
如果我使用 group_id 参数从浏览器调用它,它会像预期的那样工作。但是这个页面会从一个组页面调用到一个frameURL中,代码如下:
<?php
class page_groups extends Page {
function init(){
parent::init();
$page = $this;
$grid = $page->add('Grid');
$model = $grid->setModel('Group');
$grid->addColumn('button','members');
if($_GET['members']){
$grid->js()->univ()
->frameURL('Members' ,$page->api->url('../members',array('group_id'=>$_GET['members'])))
->execute();
}
$page->js(true)->univ()->setInterval(
$grid->js()->reload()->_enclose()
,10000);
}
}
如果我单击组 1 中的“成员”按钮,组 1 的成员页面会在一个框架中打开并每 10 秒刷新一次。没关系。但是,如果我通过单击第 2 组中的“成员”按钮关闭框架并打开一个新框架,则网格会在刷新网格的同时在第 1 组和第 2 组中循环。
我认为,问题在于由setInterval() 函数创建的计时器,它必须在框架关闭之前由clearInterval(id) 清除。 setInterval()函数有返回值,不知道怎么处理到ATK4框架中的clearInterval(id)函数?
【问题讨论】:
-
你在 page_groups 类中哪里定义了 $details_grid 变量?
-
是的,在这种情况下,您应该以某种方式从 setInterval 获取返回值并将其传递给 clearInterval。或者您可以尝试使用 setTimeout 而不是 setInterval,但 setTimeout 应该添加到网格而不是页面!这样 setTimeout JS 将在每次网格刷新时重新加载和重新加载并与网格一起重新加载。
-
哎呀...
$details_grid->grid必须在$grid中更改。我已经更改了上面的代码。谢谢。setInterval()的返回值的问题是,我得到的不是 Id,而是 jQuery 代码的平安。 :-( 但我会尝试使用setTimeout进行测试。感谢您的提示。 -
好的,我尝试将
setInterval()部分替换为:$grid->js(true)->univ()->setTimeout($grid->js()->reload()->_enclose(), 10000);但结果是一样的。也许,点击“X”后 frameURL 不会真正关闭/销毁,而只会隐藏!? -
好的,我创建了测试用例,你是对的。问题是 setInterval 在 HTML 页面“事件”中注册并继续重新加载所有以前打开的弹出窗口。我会尝试找到解决方案并在此处发布。
标签: atk4 agiletoolkit