2011-04-06 65 views
1

是否可以基于mootools创建的自动UID在Mootools上实例化元素?UID中的MooTools中的新元素

编辑:给更多的信息在发生什么事情。我正在使用https://github.com/browserstate/history.js在ajax页面中创建历史记录。当我为它添加一个DOM元素(它没有一个id)时,它在某个时候通过了一个JSON.toString方法,而我现在对这个元素的作用就是这个uid。

我需要重新创建基于这个UID的元素,我该怎么做呢?我是否需要先将其添加到全局存储以便稍后检索?如果是这样,怎么样?

回答

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)。

但是,您可以通过使用事件代理来解决该问题。

此外,你可能想要存储父节点等,所以你可以把它放回到以前的地方。

+0

首先感谢您的回答Dimitar。但我认为这并不能完全解决我需要的东西,这是我没有正确解释事情的错。我会编辑它以更好地解释发生了什么。 – 2011-04-06 13:51:36

+0

当元素被序列化时,唯一剩下的就是UID和一个空构造。我需要从DOM中取回它。我最终存储在窗口商店并稍后检索。但是,感谢所有伟大的解释。 – 2011-04-07 00:18:20