编辑行程加附件:用序号强制重建浮层,修回填不全 (#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;
|
||||
/** 「加一段行程」浮层:>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') */
|
||||
@Local nodeSheetStage: string = 'plan';
|
||||
/**
|
||||
@@ -459,6 +473,9 @@ export struct FbTripDetailPage {
|
||||
}
|
||||
if (this.nodeSheetTripId > 0) {
|
||||
this.nodeSheetTripId = 0;
|
||||
/* #55:顺手清掉 editNode —— 否则下次打开若走到"复用"路径,
|
||||
会拿到上一条行程的 editing。 */
|
||||
this.editNode = null;
|
||||
return true;
|
||||
}
|
||||
if (this.vehiclesOpen) {
|
||||
@@ -729,6 +746,8 @@ export struct FbTripDetailPage {
|
||||
this.onNodeSaved();
|
||||
}
|
||||
})
|
||||
/* #55:序号变化 ⇒ 强制重建 ⇒ 回填必然重跑 */
|
||||
.id('nodeSheet_' + this.nodeSheetSeq.toString())
|
||||
.transition(fbSheetTransition())
|
||||
}
|
||||
|
||||
@@ -1224,7 +1243,10 @@ export struct FbTripDetailPage {
|
||||
应该像网页端一样,做成两个按钮,颜色也尽可能保持一致。」)
|
||||
⇒ 改成**胶囊按钮**:有底色、圆角、内边距,与网页端 `.btn-ghost` 同观感。 */
|
||||
this.pillBtn('编辑', '#B8862B', false, (): void => {
|
||||
/* ⚠️ 顺序:先给数据,再递增序号,最后开浮层。
|
||||
序号 +1 ⇒ 组件 id 变化 ⇒ 强制重建 ⇒ aboutToAppear 重跑 ⇒ 回填生效。 */
|
||||
this.editNode = n;
|
||||
this.nodeSheetSeq = this.nodeSheetSeq + 1;
|
||||
this.nodeSheetTripId = this.tripId;
|
||||
this.nodeSheetStage = n.stage;
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user