You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
objectui#3492 已经在批量选择栏上把这条钉死过 —— packages/plugin-grid/src/bulkEligibility.ts 的 hasVisibilityGate 注释写明:「Truthiness cannot answer this: visible: false is a declared gate that excludes everything, and testing def.visible && classified it as ungated」。行菜单这两处是同一形状里没有一起收口的部分。
现象与机理
自定义行动作(
rowActionDefs/list_item动作)的可见性门用的是真值判断,于是visible: false—— 最明确的「永不显示」—— 落进「未声明门」的分支,菜单项照样渲染。origin/main@b7b05da7f:packages/plugin-grid/src/components/RowActionMenu.tsx:130(overflow 菜单项)、:219(inline primary 按钮):def.visible === false→false && …为假 → 不 return null → 渲染。packages/components/src/renderers/complex/data-table.tsx的isCustomRowActionVisible(PR fix(data-table): 行「更多操作」触发器改为数「真正会渲染的项」,空则不渲染 #3756 从DataTableRowActionItem原样提取,行为未改):内建 Edit/Delete 的
visibleWhen不受影响:那条门是!= null(RowActionMenu.tsx:179、data-table 的isBuiltinRowActionVisible),visibleWhen: false会正确隐藏。与 #3492 的关系
objectui#3492 已经在批量选择栏上把这条钉死过 ——
packages/plugin-grid/src/bulkEligibility.ts的hasVisibilityGate注释写明:「Truthiness cannot answer this:visible: falseis a declared gate that excludes everything, and testingdef.visible &&classified it as ungated」。行菜单这两处是同一形状里没有一起收口的部分。可达性(老实说)
ActionSchema.visible是ExpressionInputSchema(无 boolean),objectstack build产不出这个形状;手写视图 JSON 与进程内构造 def 可以 —— #3492 的正文说明这两条路径确实发生过(那次的后果更重:布尔visible: true交给引擎会 fault 并 fail-closed,把按钮对所有人藏了)。所以这是低可达性的具体缺陷,不是今天用户在生成式元数据里会撞到的路径;严重度请分诊裁。建议
!= null && !== ''(与hasVisibilityGate及内建visibleWhen一致);visible: false的行动作不渲染(plugin-grid 的 overflow 项与 inline 按钮各一条,data-table 的自定义项一条);isCustomRowActionVisible一处,改这一处即同时影响守卫(触发器是否渲染)与菜单项,天然一致。为什么不在 #3562 / PR #3756 里顺手改
#3756 的裁定范围是「触发器与菜单项是否一致」(守卫改数真正会渲染的项)。重定
visible: false会改变哪些项渲染,是另一个行为决定,故单独记录。发现自 objectui#3562 的实现过程;未认领。