Новый элемент в MooTools от UID - PullRequest
1 голос
/ 06 апреля 2011

Можно ли создать экземпляр элемента в Mootools на основе автоматического UID, создаваемого mootools?

РЕДАКТИРОВАТЬ: Чтобы дать больше информации о том, что происходит. Я использую https://github.com/browserstate/history.js для создания истории на странице ajax. Когда я добавляю к нему элемент DOM (у которого нет идентификатора), в какой-то момент он проходит через методы JSON.toString, и теперь у меня есть элемент uid.

Мне нужно воссоздать элемент на основе этого UID, как я могу это сделать? Нужно ли сначала добавить его в глобальное хранилище, чтобы получить его позже? Если да, то как?

1 Ответ

1 голос
/ 06 апреля 2011

с учетом отредактированного вопроса:

извините, я не понимаю, что вы делаете.

у вас есть элемент. в какой-то момент элемент превращается в объект, который сериализуется (все это - прототипы и т. д.). Затем вы берете эти данные и снова конвертируете в объект, но хотите сохранить 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).

однако вы можете обойти это, используя делегирование событий.

также вы можете сохранить родительский узел и т. Д., Чтобы вы могли вернуть его на прежнее место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...