是否可以根据mootools创建的自动UID在Mootools上实例化一个元素?
编辑:提供更多信息。我正在使用https://github.com/browserstate/history.js在ajax页面中创建历史记录。当我向它添加一个DOM元素(它没有id)时,它会在某个时刻传递一个JSON.toString方法,而我现在拥有的元素就是uid。
我需要根据这个UID重新创建元素,我怎么能这样做呢?我是否需要先将其添加到全局存储中以便以后检索?如果是这样,怎么样?
答案 0 :(得分:1)
鉴于编辑问题:
抱歉,我不明白你在做什么。你有一个元素。在某些时候,元素被转换为一个被序列化的对象(所有这些?原型等?)。然后,您再次获取该数据并转换为对象,但是想要保留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并且它将擦除它的存储空间,因此事件将无法生存。同样适用于foo.destroy()
- 您可以“直观地”恢复元素,但与其无关的任何内容都将起作用(事件或fx)。
然而,你可以通过使用事件委托来解决这个问题。
另外,您可能希望存储父节点等,以便将其放回原位。