在帶有js() - > univ() - > reloadRow($ id)的atk4中,它處理jQuery客戶端部件以刷新一行。現在,當reload_row請求到達時,網格(服務器部分)也需要輸出一行而不是整個網格。這可以通過以下電網延伸來完成(基於如何網格/在線運行正常):
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測試這個(也應該與電網只工作):
$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,它將在單擊時重新加載特定行。
簡單的ajax調用解決了這個問題。 – Stranger
如果您正在使用將數據發送到服務器以進行保存的AJAX調用來執行這些更改,則可以使用它的onSuccess部分來查找具體行並使用提交表單中的值更新其內容。 – shadyyx