From dbb14dcb88fc940cbe0b962f3cdce7d5a6782e4a Mon Sep 17 00:00:00 2001 From: Qiu Yuzhou Date: Sat, 3 Oct 2026 11:44:28 +0800 Subject: [PATCH] =?UTF-8?q?refactor(ui):=20=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E5=88=86=E5=8C=BA=E6=B4=BB=E5=8A=A8=E7=9B=AE=E6=A0=87=E6=A0=87?= =?UTF-8?q?=E8=AE=B0=E6=94=B6=E4=B8=BA=E5=B9=B3=E5=80=BC=E5=85=A5=E5=8F=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ServersView 不再观察 ProxyRuntimeController,与 SidebarRow/ ServerDetailView 的传参先例同法收 activeTargetID: NodeID?;外壳暂仍从 controller 取值,事实源切换随后一提交完成。 --- ShadowsocksX-NG2/App/MainWindowView.swift | 2 +- ShadowsocksX-NG2/App/ServersView.swift | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/ShadowsocksX-NG2/App/MainWindowView.swift b/ShadowsocksX-NG2/App/MainWindowView.swift index bc5bc6e8..1ca45db7 100644 --- a/ShadowsocksX-NG2/App/MainWindowView.swift +++ b/ShadowsocksX-NG2/App/MainWindowView.swift @@ -215,7 +215,7 @@ struct MainWindowView: View { case .servers: ServersView( workflow: workflow, - proxyController: proxyController, + activeTargetID: proxyController.activeTargetID, selection: $selection, expansion: expansion, clipboard: clipboard, diff --git a/ShadowsocksX-NG2/App/ServersView.swift b/ShadowsocksX-NG2/App/ServersView.swift index 5067dcff..38ce82cf 100644 --- a/ShadowsocksX-NG2/App/ServersView.swift +++ b/ShadowsocksX-NG2/App/ServersView.swift @@ -8,8 +8,9 @@ import SwiftUI struct ServersView: View { @ObservedObject var workflow: CatalogWorkflow - /// 运行时事实来源:活动目标标记;激活命令经 `workflow.activate`。 - @ObservedObject var proxyController: ProxyRuntimeController + /// 活动目标标记:父视图传入的运行时事实,不进目录 projection(与 + /// SidebarRow/ServerDetailView 的传参先例同法);激活命令经 `workflow.activate`。 + let activeTargetID: NodeID? @Binding var selection: NodeID? /// 分组折叠状态:组合根持有的共享对象(与首页目标树同源),跨 destination /// 切换存续;OutlineGroup 的内建展开态会随分区切换丢失,侧栏因此自管折叠。 @@ -158,7 +159,7 @@ struct ServersView: View { SidebarRow( node: node, workflow: workflow, - activeTargetID: proxyController.activeTargetID, + activeTargetID: activeTargetID, errors: errors, onRename: { id in renameTarget = id @@ -246,7 +247,7 @@ extension ServersView { errors: errors) } else { ServerDetailView( - workflow: workflow, serverID: id, isActiveTarget: proxyController.activeTargetID == id, + workflow: workflow, serverID: id, isActiveTarget: activeTargetID == id, errors: errors, clipboard: clipboard) } } else {