с учетом отредактированного вопроса:
извините, я не понимаю, что вы делаете.
у вас есть элемент. в какой-то момент элемент превращается в объект, который сериализуется (все это - прототипы и т. д.). Затем вы берете эти данные и снова конвертируете в объект, но хотите сохранить uid? Зачем?
Я не понимаю, как большое значение здесь имеет uid ...
Использование глобального хранилища браузера также сериализует в строку, так что это не сильно поможет. Мы говорим здесь о выживании загрузок страниц или просто прикрепляем / отсоединяем / перезаписываем элементы? Если последнее, это может работать с некоторыми изменениями.
(function() {
var Storage = {};
Element.implement({
saveElement: function() {
var uid = document.id(this).uid;
Storage[uid] = this;
return this;
}
});
this.restoreElement = function(uid) {
return Storage[uid] || null;
}
})();
var foo = document.id("foo"), uid = foo.uid;
console.log(uid);
foo.saveElement().addEvent("mouseenter", function() { alert("hi"); } );
document.id("container").set("html", "");
setTimeout(function() {
var newElement = restoreElement(uid);
if (newElement)
newElement.inject(document.body);
console.log(newElement.uid);
}, 2000);
http://jsfiddle.net/dimitar/7mwmu/1/
это позволит вам удалить элемент и восстановить его позже.
имейте в виду, что я делаю container.set("html", "");
, что не очень хорошая практика.
если вы сделаете .empty()
, он получит GC-файл и сотрет хранилище, чтобы событие не сохранилось. То же самое для foo.destroy()
- вы можете «визуально» восстановить элемент, но ничего с ним не сработает (события или FX).
однако вы можете обойти это, используя делегирование событий.
также вы можете сохранить родительский узел и т. Д., Чтобы вы могли вернуть его на прежнее место.