- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在做一个项目,用户可以输入他们的股票交易(手数),然后查看一些统计数据。我的问题是,当从 ListView 转到详细编辑 View 并按保存时, ListView 没有收到有关此更改的通知(主视图也没有)
我总是可以尝试将以前的 View 模型传递给编辑 View 以使它们无效,但这对我来说似乎是一个 hack,所以我想知道我是否遗漏了一些重要的 SwiftUI。
这是 ListView 的代码
struct StockView: View {
@ObservedObject var vm: StockViewModel
init(_ symbol: String) {
vm = StockViewModel(symbol)
}
var body: some View {
List {
ForEach(vm.lots, id: \.id) { lot in
NavigationLink(destination: LotEditView(lot.id)) {
...
}
}
}.navigationTitle("My Lots")
.listStyle(PlainListStyle())
}
}
和编辑 View 的代码
struct LotEditView: View {
@Environment(\.presentationMode) var mode
@ObservedObject var vm: LotEditViewModel
init(_ id: UUID) {
vm = LotEditViewModel(id)
}
var body: some View {
VStack {
Form {
...
}
}.navigationTitle("Edit Lot")
.toolbar {
Button("Done") {
vm.save()
mode.wrappedValue.dismiss()
}
}
}
}
List ViewModel 使用股票名称进行初始化,然后使用该名称从模拟数据库中获取批处理,然后将每个批处理的 id 传递给 Edit ViewModel。 vm.save() 只是更新数据库,在这种情况下,它只是一个我已经确认正在更新的数组。
最佳答案
因此,您要做的是拥有该 Mock 数据库的一个实例并将其注入(inject)到 viewModel 中。
我认为这里最简单的方法是将这个模拟数据库作为@StateObject。在初始 View 中创建它(可能是 homeView 甚至 Appdelegate)并将其作为 environmentObject 传递给其他 View 。
struct StockView: View {
@ObservedObject var vm: StockViewModel
@StateObject var dbService = MyMockDatabase()
init(_ symbol: String) {
vm = StockViewModel(dbService: dbService, symbol: symbol)
}
var body: some View {
List {
ForEach(vm.lots, id: \.id) { lot in
NavigationLink(destination: LotEditView(lot.id).environmentObject(dbService)) {
...
}
}
}.navigationTitle("My Lots")
.listStyle(PlainListStyle())
}
}
在您的下一个屏幕中,将其用作:
struct LotEditView: View {
@Environment(\.presentationMode) var mode
@EnvironmentObject var dbService: MyMockDatabase
@ObservedObject var vm: LotEditViewModel
init(_ id: UUID) {
vm = LotEditViewModel(dbService: dbService, id: id)
}
var body: some View {
VStack {
Form {
...
}
}.navigationTitle("Edit Lot")
.toolbar {
Button("Done") {
vm.save()
mode.wrappedValue.dismiss()
}
}
}
}
MockArray 看起来像:
class MyMockDatabase: ObservableObject {
@Published var array = [...]
}
关于ios - 尝试更新表单提交 SwiftUI 的先前 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68644104/
我的应用将 SceneKit 内容的“页面”与图像和文本交替。当我从图像页面前进到新的 SceneKit 页面时,前一个 SceneKit 页面中的内容会短暂显示,然后被新内容替换。时髦。 我只使用一
我正在尝试处理(在 C# 中)包含一些数字数据的大型数据文件。给定一个整数数组,如何对其进行拆分/分组,以便如果下一个 n(两个或更多)是负数,则前一个 n 元素被分组。例如,在下面的数组中,应该使用
刚接触promises,研究过。所以我的代码和我的理解: sql.connect(config).then(function(connection) { return connection.req
目前我在 if (roobaf) block 中有一些代码,这取决于 foo 和 bar 是否为假。我可以在 block 内再次检查这些条件,但感觉像是不必要的代码重复。 if (foo) {
我是一名优秀的程序员,十分优秀!