Использование replaceState () (или чего-то еще) для обновления объекта состояния вместо его замены - PullRequest
2 голосов
/ 08 декабря 2011

Есть ли какая-то техника, которую я могу использовать (возможно, что-то умное с replaceState()), чтобы обновить объект состояния истории, а не заменить его?

Учитывая существующий объект состояния, который выглядит следующим образом:

{ prop1:someValue, prop2:someOtherValue }

Я хочу иметь возможность вызывать что-то, что изменит prop1, но оставит prop2 в покое.

Полагаю, я действительно ищу modifyState(), а не replaceState().

Это было бы тривиально, если бы я знал, каково значение prop2, но я не знаю.Firefox позволяет вам читать history.state напрямую, поэтому я смог найти значение в Firefox и перейти к replaceState().Однако это не сработает для Chrome, Safari и др.потому что (насколько я могу судить) они не разрешают прямой доступ к history.state.

Есть ли способ изменить объект состояния, как описано выше?

1 Ответ

0 голосов
/ 05 ноября 2012

History.js позволяет манипулировать состояниями через replaceState начиная с Chrome 8.

В настоящее время у меня есть похожая проблема, когда требуется изменить только часть состояния.Это достигается путем клонирования данных текущего состояния, изменения значения и последующего вызова replaceState.

History.replaceState(newState, null, oldState.url);
...