Есть много функций, которые можно использовать, если вы читаете исходный код, хотя официальная строка: 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
, которое является инкрементным и уникальным.Начиная с MooTools 1.4.2, это доступно только для чтения через Slick.uidOf(node)
, а не через старый элемент attr .uid
.Теперь вы можете использовать новое свойство uniqueNumber
любого объекта MooTools Element.
Как это используется?Для начала, Элемент Хранения.Он использует 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')
, а не ElementКонструктор
Slick.uidOf(foo); // makes it compatible with Storage
// same as:
document.id(foo);
Вещи, которые хранятся платформой в Storage, также включают в себя все events
обратные вызовы, validators
экземпляры, Fx
экземпляры (tween, morph и т. д.) и т. д.
Что вы можете сделать, зная 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!