- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有以下代码可以在当前页面状态下保存我的数据
。
window.history.pushState({myData: data}, "RandomTitle", '#');
但是现在,我还想保存另一个值,即 scrollTop
。如果我这样做
window.history.pushState({scrollTop: scrollTop}, "RandomTitle", '#');
上面的代码将用新的状态替换历史状态,myData
将消失。
问题是,当我的历史状态中有 myData
时,无论如何我可以添加 scrollTop
吗?或者我只需要最初设置它,
window.history.pushState({myData: data, scrollTop: 0}, "RandomTitle", '#');
// To change the scrollTop in history state
window.history.state.scrollTop = $(window).scrollTop();
我在想是否有像 window.history.state.addObject
之类的函数。
最佳答案
默认情况下,没有history.state.addObject
函数。 history.state
包含您推送的对象(没有其他内容)。
您可以推送具有 addObject
方法的内容,但这看起来不是一个好主意。如果您希望将更改作为新状态推送到历史记录中,则无论如何每次都必须显式推送该状态。当你推送一个新状态时,你希望避免改变前一个状态,如果你使用相同的状态对象并修改它就会发生这种情况(即使根据 the standard ,history.state
是应该是实际状态数据的克隆)。您应该改为创建一个新对象(它可能是先前状态的克隆)。
这里是你如何做到的。
window.history.pushState(
Object.assign({}, window.history.state, {scrollTop: scrollTop}),
"RandomTitle", '#'
);
即使历史中没有当前状态(即 window.history.state
是 undefined
)它也会工作 Object.assign
忽略 undefined
参数。
你也可以使用这个函数来自动化它:
function extendHistoryState(){
arguments[0] = Object.assign({}, window.history.state, arguments[0]);
window.history.pushState.apply(window.history, arguments);
}
它的工作原理与 pushState
完全相同(参数相同),只是它还会将先前状态的属性复制到新状态。因此,您可以执行以下代码来代替之前的代码:
extendHistoryState({scrollTop: scrollTop}, "RandomTitle", '#');
关于javascript - 如何向历史添加或附加新的 stateObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36929148/
我有这个 App 结构,我需要用 userManager 初始化 appearancesStore 和 behavioursStore。但是我收到错误 Escaping auto closure ca
我有以下代码可以在当前页面状态下保存我的数据。 window.history.pushState({myData: data}, "RandomTitle", '#'); 但是现在,我还想保存另一个值
SwiftUI 似乎不会为列表行保留 @StateObjects,当行嵌入容器(如堆栈或 NavigationLink)时。这是一个例子: class MyObject: ObservableObje
希望这应该是一个简单的。 我正在尝试从 http://msdn.microsoft.com/en-us/library/bysfec7w.aspx 了解 Socket.BeginAccept 方法 在
struct ProfileEditView: View { @ObservedObject var viewModel: UsersViewModel @StateObject var auth:
我想知道目前(在询问时,第一个 Xcode 12.0 Beta)是否有初始化 @StateObject 的方法。带有来自初始化程序的参数。 更具体地说,这段代码可以正常工作: struct MyVie
除了书写方式,_StateObjectName createState() => _StateObjectName();和return _StateObjectName();有什么区别?功能上有什么不
var stateObj = { foo: "bar" }; history.pushState(stateObj, "page 2", "bar.html"); state 对象 — 状态对象是一个
Xcode 12 测试版 6 (12A8189n) iPhone 11、iOS 14.0 模拟器 在给定的代码示例中,CreateSomethingView 的表示有效,但是解雇它不起作用。我对使用
状态对象 以前StateObject只能在ios 14中使用,突然间我在ios 13中可以使用了。 但是,我找不到 StateObject 在 ios 13 中可用的任何地方。即使我查看它的定义,它也
这来自关于 SwiftUI App 协议(protocol)的 Apple 文档: @main struct Mail: App { @StateObject private var mode
当使用与 View 更新关联的不同属性包装器时,一处的更改会影响不使用该属性的 View 的呈现。 struct ContentView: View { @StateObject var vi
如果我有一个 ObservableObject在 SwiftUI 中,我可以将其称为 @ObservedObject : class ViewModel: ObservableObject {
每次应用程序启动时,我都必须进行一些初始设置,但出现错误: 错误很明显,答案不是。我尝试将 init 放在 subview 中,但我不能,它需要在根 @main 中.我是这样定义的: @StateOb
我是一名优秀的程序员,十分优秀!