Я боюсь, что это могло бы быть невозможно, но является там способом изменить значение хэш-функции URL, не оставляя запись в истории браузера и без перезагрузки? Или эквивалент?
Насколько специфические особенности идут, я разрабатывал некоторую основную навигацию хеша вроде:
//hash nav -- works with js-tabs
var getHash = window.location.hash;
var hashPref = "tab-";
function useHash(newHash) {
//set js-tab according to hash
newHash = newHash.replace('#'+hashPref, '');
$("#tabs li a[href='"+ newHash +"']").click();
}
function setHash(newHash) {
//set hash according to js-tab
window.location.hash = hashPref + newHash;
//THIS IS WHERE I would like to REPLACE the location.hash
//without a history entry
}
// ... a lot of irrelavent tabs js and then....
//make tabs work
$("#tabs.js-tabs a").live("click", function() {
var showMe = $(this).attr("href");
$(showMe).show();
setHash(showMe);
return false;
});
//hash nav on ready .. if hash exists, execute
if ( getHash ){
useHash(getHash);
}
Используя jQuery, очевидно. Идея состоит в том что в этом определенном экземпляре 1) заставляющий пользователя возвращаться по каждому изменению вкладки, мог эффективно 'повредить кнопку "Назад"' путем накопления бесполезных ссылок и 2) не сохраняющий, какая вкладка они в настоящее время включены, если они поражают обновление, является раздражением.
Вы можете делать именно то, что пытаетесь. Отсутствует только пользовательский конструктор, вызывающий конструктор по умолчанию:
struct Animal
{
public string name = "";
public static int weight = 20;
public Animal(bool someArg) : this() { }
}
Конструктор должен взять хотя бы один параметр, а затем переслать this ()
для инициализации членов.
Причина, по которой это работает, заключается в том, что компилятор теперь имеет возможность обнаружить время, когда код должен выполняться для инициализации поля name
: всякий раз, когда вы пишете new Animal (someBool)
.
С любой структурой вы можете сказать new Animal ()
, но «пустые» животные могут быть созданы неявно во многих обстоятельствах в работе CLR, и нет способа гарантировать, что пользовательский код будет выполняться каждый раз, когда это произойдет.
Я не уверен, насколько точно в вашем приложении иерархически находятся FureEndBoard и BoardCell, но вам может потребоваться сообщить событию «newMove», что оно может пузырь .
var e:Event = new Event("newMove", true);
-121--4293644- Изменить: Прошло уже пару лет, и браузеры развивались.
@ Luxiyalu ответ - это путь к
-- Старый ответ --
Я тоже думаю, что это невозможно (в настоящее время). Но почему вам нужно изменить значение хеша, если вы не собираетесь использовать его?
Я считаю, что основная причина, почему мы используем значение хеша как программисты, это позволить пользователю закладывать наши страницы, или сохранить состояние в истории браузера. Если вы не хотите делать ничего из этого, то просто сохраните состояние в переменной и работайте оттуда.
Я думаю, что причина использовать хэш - работать со значением, которое не под нашим контролем. Если вам это не нужно, то это, вероятно, означает, что у вас все под контролем, поэтому просто храните состояние в переменной и работайте с ней. (Я люблю повторяться)
Надеюсь, это поможет вам. Может быть, есть более простое решение вашей проблемы.
ОБНОВЛЕНИЕ: Как насчет этого:
window.history.back (1)
, которая вернет историю с первого хэша init. Вероятно, вам придется использовать некоторые флаги, чтобы узнать, можно ли «удалить» текущую запись, возвращаясь назад, или вы просто пропустите первый шаг.
И чтобы убедиться, что ваш метод загрузки для «хеша» не выполняется, когда вы форсируете history.back
.