编辑行程加附件:用序号强制重建浮层,修回填不全 (#55)
根因:@Param editing 在 V2 里是单向同步 —— 父组件改 editNode 后子组件 的 editing 会更新,但 aboutToAppear 只在首次创建时跑一次。 ⇒ 换一条行程再点编辑时,editing 变了但回填不重跑 ⇒ photos 保留上次的值。 修法:加 nodeSheetSeq,点编辑时 +1,组件用 .id(nodeSheet_N) 绑定序号。 序号变化时 ArkUI 销毁旧组件、创建新组件 ⇒ aboutToAppear 必然重跑。 顺带:返回键关闭时也清 editNode,避免下次走到复用路径拿到上一条的 editing。
This commit is contained in:
@@ -386,6 +386,20 @@ export struct FbTripDetailPage {
|
|||||||
@Local editOpen: boolean = false;
|
@Local editOpen: boolean = false;
|
||||||
/** 「加一段行程」浮层:>0 = 开着,值 = 要往哪一趟加 */
|
/** 「加一段行程」浮层:>0 = 开着,值 = 要往哪一趟加 */
|
||||||
@Local nodeSheetTripId: number = 0;
|
@Local nodeSheetTripId: number = 0;
|
||||||
|
/**
|
||||||
|
* 行程浮层的**重建序号**(#55)。
|
||||||
|
*
|
||||||
|
* 🔴 用户:「修改编辑行程,图片和视频带进来都不全。」
|
||||||
|
*
|
||||||
|
* 根因:`@Param editing` 在 V2 里是单向同步 —— 父组件改了 `editNode`,
|
||||||
|
* 子组件的 `editing` 会更新,但 **`aboutToAppear` 只在首次创建时跑一次**。
|
||||||
|
* ⇒ 换一条行程再点编辑时,`editing` 变了但**回填不会重跑**
|
||||||
|
* ⇒ `this.photos` 保留上一次的值(可能为空)⇒ 附件带不全。
|
||||||
|
*
|
||||||
|
* ⇒ 用 `.id('nodeSheet_' + seq)` 让序号变化时 ArkUI **销毁旧组件、创建新组件**
|
||||||
|
* ⇒ `aboutToAppear` 必然重跑。这是"强制重建"最可靠的做法。
|
||||||
|
*/
|
||||||
|
@Local nodeSheetSeq: number = 0;
|
||||||
/** 加行程浮层的预选阶段('plan' / 'actual') */
|
/** 加行程浮层的预选阶段('plan' / 'actual') */
|
||||||
@Local nodeSheetStage: string = 'plan';
|
@Local nodeSheetStage: string = 'plan';
|
||||||
/**
|
/**
|
||||||
@@ -459,6 +473,9 @@ export struct FbTripDetailPage {
|
|||||||
}
|
}
|
||||||
if (this.nodeSheetTripId > 0) {
|
if (this.nodeSheetTripId > 0) {
|
||||||
this.nodeSheetTripId = 0;
|
this.nodeSheetTripId = 0;
|
||||||
|
/* #55:顺手清掉 editNode —— 否则下次打开若走到"复用"路径,
|
||||||
|
会拿到上一条行程的 editing。 */
|
||||||
|
this.editNode = null;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (this.vehiclesOpen) {
|
if (this.vehiclesOpen) {
|
||||||
@@ -729,6 +746,8 @@ export struct FbTripDetailPage {
|
|||||||
this.onNodeSaved();
|
this.onNodeSaved();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
/* #55:序号变化 ⇒ 强制重建 ⇒ 回填必然重跑 */
|
||||||
|
.id('nodeSheet_' + this.nodeSheetSeq.toString())
|
||||||
.transition(fbSheetTransition())
|
.transition(fbSheetTransition())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1224,7 +1243,10 @@ export struct FbTripDetailPage {
|
|||||||
应该像网页端一样,做成两个按钮,颜色也尽可能保持一致。」)
|
应该像网页端一样,做成两个按钮,颜色也尽可能保持一致。」)
|
||||||
⇒ 改成**胶囊按钮**:有底色、圆角、内边距,与网页端 `.btn-ghost` 同观感。 */
|
⇒ 改成**胶囊按钮**:有底色、圆角、内边距,与网页端 `.btn-ghost` 同观感。 */
|
||||||
this.pillBtn('编辑', '#B8862B', false, (): void => {
|
this.pillBtn('编辑', '#B8862B', false, (): void => {
|
||||||
|
/* ⚠️ 顺序:先给数据,再递增序号,最后开浮层。
|
||||||
|
序号 +1 ⇒ 组件 id 变化 ⇒ 强制重建 ⇒ aboutToAppear 重跑 ⇒ 回填生效。 */
|
||||||
this.editNode = n;
|
this.editNode = n;
|
||||||
|
this.nodeSheetSeq = this.nodeSheetSeq + 1;
|
||||||
this.nodeSheetTripId = this.tripId;
|
this.nodeSheetTripId = this.tripId;
|
||||||
this.nodeSheetStage = n.stage;
|
this.nodeSheetStage = n.stage;
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user