回答
有很多功能,如果你讀的源代碼可以使用,雖然官方的說法是:if it's not in the documentation, it is not in the api and it's not supported so do not base your code around it as it may change
話雖這麼說,有幾件事情,真的是非常有用的。我最喜歡的無證特點是:
引用的元素都已經或者正在創建或通過選擇傳遞一個UID
任何元素,被分配的屬性uid
,這是漸進的和獨特的。由於MooTools 1.4.2,這隻能通過Slick.uidOf(node)
而不是通過舊元素attr .uid
讀取。您現在可以使用任何MooTools元素對象的新uniqueNumber
屬性。
這是如何使用?對於初學者來說,元素存儲。它依賴於uid作爲關閉中的Storage
對象中的關鍵字,該關鍵字將包含任何對該元素具有.store
'd的對象。
element.store('foo', 'bar');
翻譯爲:
Storage[Slick.uidOf(element)].foo = 'bar';
和
element.retrieve('foo'); // getter of the storage key
element.eliminate('foo'); // delete Storage[Slick.uidOf(element)].foo
初始化存儲爲您外部創建的元素,例如,通過var foo = document.createElement('div')
而不是元素構造
Slick.uidOf(foo); // makes it compatible with Storage
// same as:
document.id(foo);
釷被存儲在由框架入庫英格斯還包括所有events
回調,validators
情況下,Fx
實例(吐溫,變形等)等。
你能做些什麼知道元素的UID?那麼,克隆元素不會獲取元素的存儲或事件。實際上,你可以寫一個新的Element.cloneWithStorage
原型,也將複製所有存儲的值,你可能有,這是高達一點有用的 - 引用的特定元素(如,Fx.Tween
)情況下,將繼續引用舊元素,所以它可能意想不到的結果。這對於移動自己的存儲非常有用,但是,您只需要一個類似的方法即可記錄您存儲的內容並允許您將其克隆。另一種元素的數據
事例存儲穿刺:
var foo = new Element('div'),
uid = foo.uniqueNumber;
foo.store('foo', 'foo only');
var bar = new Element('div');
console.log(bar.retrieve('foo')); // null
bar.uniqueNumber = uid; // force overwrite of uid to the other el
console.log(bar.retrieve('foo')); // foo only - OH NOES
console.log(Object.keys(foo)); // ["uniqueNumber"] - oh dear. enumerable!
Function.prototype.protect
也許是一個鮮爲人知不錯的。
是用於類擁有受保護的方法:
var Foo = new Class({
fooify: function(){
console.log('can\'t touch me');
}.protect(),
barify: function(){
this.fooify();
}
});
var foo = new Foo();
foo.fooify(); // throws error
foo.barify(); // logs "can't touch me"
我個人不經常使用它,但它可能在某些情況下是有用的。
Function.prototype.overloadGetter
和Function.prototype.overloadSetter
看到這個職位:What does MooTools' Function.prototype.overloadSetter() do?
類增變
MooTools有一個奇妙的功能,使您可以創建自己的類存取器。例如,添加一個記錄器的被引用特定類的方法,你可以這樣做:
// define the mutator as 'Monitor', use as Mointor: ['methodname', 'method2'...]
Class.Mutators.Monitor = function(methods){
if (!this.prototype.initialize) this.implement('initialize', function(){});
return Array.from(methods).concat(this.prototype.Monitor || []);
};
Class.Mutators.initialize = function(initialize){
return function(){
Array.from(this.Monitor).each(function(name){
var original = this[name];
if (original) this[name] = function() {
console.log("[LOG] " + name, "[SCOPE]:", this, "[ARGS]", arguments);
original.apply(this, arguments);
}
}, this);
return initialize.apply(this, arguments);
};
};
,然後在類:
var foo = new Class({
Monitor: 'bar',
initialize: function() {
this.bar("mootools");
},
bar: function(what) {
alert(what);
}
});
var f = new foo();
f.bar.call({hi:"there from a custom scope"}, "scope 2");
嘗試的jsfiddle:http://jsfiddle.net/BMsZ7/2/
這個小寶石有對於我在一個HUUUGE異步web應用程序中捕捉嵌套的bugfoot競爭條件問題有幫助,否則這很難追蹤。
我建議你閱讀的優秀Up the Moo Herd系列Mark Obcena的Pro Javascript With MooTools :)
我知道這不符合所需的格式(每個答案一個功能),但是再次,這個問題並不適合SO格式;) – MattiSG
我最喜歡的功能,後來我才知道,但我希望從一開始就知道作者 - 事件假點,尤其是:once
。
見http://mootools.net/docs/more/Class/Events.Pseudos#Pseudos:once
你可以自由回答任何問題,無論它多大,特別是沒有被接受的答案。每個問題都有其訪問者,並可能有助於某人。 – Wh1T3h4Ck5
的確是@jdwire,沒有限制。當你和我做得更好時,StackOverflow會變得更好。 – artlung
好的。多謝你們。剛加入,所以試圖學習我的方式。 –
- 1. MooTools的:隱藏要素的高度
- 2. Mootools隱藏/顯示卷軸上的div
- 3. 隱藏在mootools中的跨度
- 4. 下拉隱藏背後的mootools silder
- 5. mootools Fx.Slide切換隱藏的元素不工作
- 6. 防止Mootools Mouseenter發射隱藏的子元素
- 7. Mootools擠壓箱處理程序刪除隱藏的div元素
- 8. 隱藏的隱藏欄
- 9. 的Javascript(jQuery的或MooTools的或純JavaScript)隱藏元素的內容或HREF
- 10. J查詢隱藏隱藏
- 11. 隱藏錶行是隱藏
- 12. 隱藏/取消隱藏行
- 13. 設置爲隱藏後隱藏的按鈕不隱藏 - IOS
- 14. 在底層圖像滑動時隱藏滑塊中的標題文本#mootools
- 15. 保持溢出:隱藏真的隱藏
- 16. 隱藏隱藏的div(視頻)html5
- 17. 切換隱藏已經隱藏的div?
- 18. 隱藏的詠歎調隱藏
- 19. 信息隱藏與隱藏的依賴
- 20. Zend隱藏的元素:隱藏html值
- 21. 隱藏代碼隱藏的HTML屬性
- 22. 隱藏和取消隱藏的EditText
- 23. 隱藏的jQuery
- 24. 隱藏的div
- 25. 隱藏的div
- 26. 隱藏的div
- 27. 隱藏的JavaScript
- 28. 隱藏textarea的
- 29. 隱藏的Blogger
- 30. 隱藏的UITabBar
這應該是一個社區維基 –
我同意。我不知道該怎麼做。 – artlung
不幸的是,你需要10k + rep來做到這一點,我想。 –