升级陀螺仪出现"incomplete keychange"错误如何解决

How to resolve the "incomplete keychange" error when upgrading Gyroscope

用较新版本的 Gyroscope 替换核心文件后,使用 reloadtab 添加新记录会引发 JavaScript 警报错误 "incomplete key change"。虽然详细视图的加载已中止,但仍会创建记录。

在clients.js中:

reloadtab('client_new', null, oclientname.value,
     'addclient&params='+params.join('&'));

在icl/addclient.inc.php:

header('newrecid:'.$clientid);
header('newkey:client_'.$clientid);

从 6.7 开始,代码生成器具有以下行:

header('newparams:showclient&clientid='.$clientid);

这是支持 "tab refresh" 功能所必需的。 Double-clicking 在任何活动选项卡上将重新加载当前选项卡。在移动设备上,每个选项卡视图顶部都有一个 "refresh view" 按钮。

默认情况下,当使用 "addtab" 打开标签时,标签会记住 "how it is opened"。刷新选项卡只是重播命令。

addtab('client_123', 'Client Name', 'showclient&clientid=123');

在上面的例子中,"showclient&clientid=123"在刷新期间被重用。

reloadtab 函数主动忽略重播参数,因为该函数通常与更新数据库相关联。例如,更新或创建记录。

在到达icl/addclient.inc.php之前,在前端调用了两个tab函数:

addtab('client_new','New Client','newclient');
reloadtab('client_new',null,'addclient&...');

创建记录后,如果自动递增 ID 为 124,tab 键将升级为 client_124。这是一个 键更改 ,在 3.2 中作为 rekey 选项引入。新选项卡内容实际上与 showclient&clientid=124 相同。但它没有注册重播参数。双击选项卡将重播 "newclient",错误地重新打开记录表单。

为防止此错误,tabs.js 主动检查 "newkey" header 并确保还提供了 "newparams"。

同样在过去,标签标题在发送服务器请求之前在reloadtab中单独设置。现在参数可以为空字符串,服务器端的"newtitle" header会更新新的tab title