2011-04-06 50 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