如何将文档 ID 从视图传递到 ViewModel 来查找该文档

问题描述 投票:0回答:1

我需要一些帮助。我正在编写一个非营利应用程序,但我已经陷入停滞状态。在 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)
                }
            }
        }
}

}

任何对类似问题的帮助或参考,我们将不胜感激。

firebase google-cloud-firestore swiftui viewmodel
1个回答
0
投票

在您的

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
     } 
}
© www.soinside.com 2019 - 2024. All rights reserved.