我需要一些帮助。我正在编写一个非营利应用程序,但我已经陷入停滞状态。在 firebase 上的会议中创建并存储会议列表。每个会议都有子集合。我已修复此问题,以便用户可以从列表中选择会议,并显示一个包含该会议信息的屏幕。很容易。我在该屏幕底部有一些按钮,可以将用户带到子集合会议。在这些视图上很容易传递主要会议细节。我的问题是我很难弄清楚如何将我的主会议 ID(在列表中选择)传递到 viewModel 中,以便我可以轻松搜索该会议的子集合以显示在子集合会议视图上。
所以..我的数据库看起来像这样。
会议(会议)合集
SubCollection1(突破) *突破1 *突破2 *突破3
SubCollection2(游览) *游览1 *旅游2
用户再次从列表中选择会议。 转至会议详细信息屏幕。 (我现在有meetingId) 用户选择按钮转到“Subcollection1”(我仍然有meetingID) (我只需要知道如何将该 MeetingID 传递到 viewModel 中,以便我可以获取 Subcollection1 信息。):-/
在这里我将“meet”传递到下一个视图。我怎样才能将“meet”注入到我的viewModel中来访问它的uid/id
List{
ForEach(viewModel.meetings) { meet in
ZStack {
NavigationLink(value: meet) {
EmptyView()
}.opacity(0.0)
MeetingsRowView(meeting: meet, viewModel: viewModel)
.onAppear {
if meet == viewModel.meetings.last {
print("DEBUG: Paginate here..")
}
}
}
}.onAppear(perform: {
Task { try await viewModel.fetchAllMeetings()}
})
}
这是我试图从中提取“满足”的视图
struct LongProductsView: View {
@StateObject var viewModel = MeetingViewModel()
@State private var showNewMeetingView = false
@State private var showMeeting = false
@Environment(\.dismiss) var dismiss
var meet: Meeting
var body: some View {
// I can show the meeting selected details here in text. I need to inject
// this "meet" into viewModel to use as variable for firebase subcollection lookup.
Text(meet.title)
Text(meet.datestart)
.toolbar{
ToolbarItem(placement: .navigationBarLeading) {
HStack{
Button(action: {
dismiss()
}, label: {
Image(systemName: "arrowshape.turn.up.backward")
.font(.footnote)
.foregroundColor(.blue)
}
).padding(.vertical)
}
}
}
}
}
任何对类似问题的帮助或参考,我们将不胜感激。
在您的
MeetingViewModel
中,您可以有一个函数,例如 func selectedMeeting(_ meet: Meeting) {...}
和一个变量 var selected: Meeting
你更新的。在您的 LongProductsView
中,您可以添加 .onAppear { viewModel.selectedMeeting(meet) }
。
例如:
struct LongProductsView: View {
//....
var body: some View {
//...
.onAppear {
viewModel.selectedMeeting(meet)
}
}
}
还有
class MeetingViewModel: ObservableObject {
//...
var selected: Meeting?
func selectedMeeting(_ meet: Meeting) {
selected = meet
}
}