fix(编辑器): 嵌套条件判断的分支同步写错容器 —— 修复「填了值保存就没了」+「步骤被改名」
用户报的现象(生产「评论」任务):
① 一直提示"步骤7子步骤1没有填写包名"
② 包名填了、一保存就没了
③ 那个步骤还会"自己重命名"成「指定视频评论」
根因(**2026-08-11 的 060157e 引入的老 bug,不是本批改动**):
`_syncParams` 定位 if_el 的分支容器时用的是
card.querySelector(':scope > .if-branch .step-children.if-else')
`.if-branch` 与 `.step-children` 之间是**空格(后代)**而不是 `>`(直接子级)。
于是**条件判断里再嵌一个条件判断**时,外层卡片会匹配到**内层那个 if_el 的分支容器**
(文档顺序上它更靠前),把内层的子步骤当成自己的分支去同步:
· 内层分支的「步骤名」输入框 → 写进了外层分支里那个 stop_app 的 label
(所以步骤被改名成内层容器步骤的名字「指定视频评论」);
· 内层分支里**没有**包名输入框 → 外层那个 stop_app 的 package **永远读不回来**
(所以"填了保存就没"、保存后仍报"没填包名")。
把两处都改成直接子级(`> `)即可。then 那侧此前恰好因为文档顺序能命中自己,
但写法一样脆,一并收紧。
验证:最小复现(外层 if_el 的 then 里嵌内层 if_el,外层 else 放 stop_app+screen_off)
—— 修复前:`package=""`、`label="指定视频评论"`(与用户现象逐字一致);
修复后:`package="com.ss.android.ugc.aweme"`、`label="我给它起的名"`。
另扫了生产全部 6 个任务:只有「评论」这一个任务的结构会踩到,且已经踩了
(`7.第1步 stop_app 包名为空`)—— 改动不会波及其它任务。
This commit is contained in:
@@ -996,11 +996,16 @@ var _stepEditor={
|
||||
self._syncParams(childWrap,steps[i].params.children);
|
||||
}
|
||||
// if_el 双分支(then/else 在 .if-branch 内,不会与上面的直接子级选择器冲突)
|
||||
var thenWrap=card.querySelector(':scope > .if-branch .step-children.if-then');
|
||||
//
|
||||
// ⚠ `.if-branch` 与 `.step-children` 之间**必须是 `>`(直接子级)**:
|
||||
// 写成后代(空格)时,条件判断里再嵌套一个条件判断的话,本卡片会**匹配到内层
|
||||
// 那个 if_el 的分支容器**(文档顺序上更靠前),于是把内层分支的子步骤当成自己的
|
||||
// 去同步 —— 症状:自己的步骤"填了值保存就没了"、步骤名被内层的容器步骤覆盖。
|
||||
var thenWrap=card.querySelector(':scope > .if-branch > .step-children.if-then');
|
||||
if(thenWrap&&steps[i].params&&Array.isArray(steps[i].params.then)){
|
||||
self._syncParams(thenWrap,steps[i].params.then);
|
||||
}
|
||||
var elseWrap=card.querySelector(':scope > .if-branch .step-children.if-else');
|
||||
var elseWrap=card.querySelector(':scope > .if-branch > .step-children.if-else');
|
||||
if(elseWrap&&steps[i].params&&Array.isArray(steps[i].params.else)){
|
||||
self._syncParams(elseWrap,steps[i].params.else);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user