在带有 js()->univ()->reloadRow($id) 的 atk4 中,它处理 jquery 客户端部分以刷新一行。现在网格(服务器部分)也需要在这个 reload_row 请求到达时输出一行而不是整个网格。这可以通过以下 Grid 扩展来完成(基于网格/内联的功能):
Class TestGrid extends Grid {
function init() {
parent::init();
if($row_id=$_GET[$this->name.'_reload_row']){
$g=$this;
$this->api->addHook('pre-render',function() use($g,$row_id){
$g->precacheTemplate();
foreach($g->getIterator() as $g->current_id=>$g->current_row){
if($row_id == $g->current_id) {
$g->formatRow();
$result=$g->rowRender($g->row_t);
if($g->api->jquery)$g->api->jquery->getJS($g);
break;
}
}
throw new \Exception_StopRender($result);
});
}
}
}
为了在页面上使用 CRUD 进行测试(它也应该只与 Grid 一起使用):
$g=$this->add('CRUD', array('grid_class' => 'TestGrid'));
$g->setModel('User');
if($g->grid) {
$g->grid->addColumn('button', 'rerow');
if($row_id = $_GET['rerow']){
$g->grid->js()->univ()->reloadRow($row_id)->execute();
}
}
这会产生一个带有额外按钮“Rerow”的 CRUD,单击该按钮将重新加载特定行。