AbstractNode наследуется от basis.data.Object и тем самым перенимает все механизмы работы с данными и состоянием. Таким образом узлы интерфейса сами могут выступать в качестве моделей данных.
Данные узла хранятся в свойстве data, его состояние в свойстве state. Так же широко используется делегирование.
В дополнение унаследованным свойствам AbstractNode вводит дополнительное свойство – autoDelegate. Это свойство позволяет автоматизировать делегирование родителя и/или владельца. Возможны несколько значений свойства (определены в basis.dom.wrapper.DELEGATE):
NONE – нет автоматического делегирования, значение по умолчанию;
PARENT – узел должен делегировать своего родителя (parentNode);
OWNER – узел должен делегировать своего владельца (owner);
ANY – узел должен делегировать своего родителя или владельца; всегда возможен только один вариант, так как parentNode и owner не могут быть установлены одновременно (см parentNode vs. owner).
Вместо basis.dom.wrapper.DELEGATE.ANY можно использовать значение true, а вместо basis.dom.wrapper.DELEGATE.NONE – false.
var autoDelegateNode = new basis.dom.wrapper.Node({
autoDelegate: true
});
var parent = new basis.dom.wrapper.Node();
var owner = new basis.dom.wrapper.Node();
console.log(autoDelegateNode.delegate);
// console> null
parent.appendChild(autoDelegateNode);
console.log(autoDelegateNode.parentNode === parent);
// console> true
console.log(autoDelegateNode.delegate === parent);
// console> true
parent.removeChild(autoDelegateNode); // если узел не удалить у parent,
autoDelegateNode.setOwner(owner); // то установка владельца вызовет исключение
console.log(autoDelegateNode.owner === owner);
// console> true
console.log(autoDelegateNode.delegate === owner);
// console> true
Делегат назначается при изменении соответствующего свойства (parentNode или owner), но после этого изменения можно выставить произвольный делегат, используя метод setDelegate.
На данный момент это не ограничивается, но в будущем эта ситуация должна быть разрешена таким образом, чтобы
delegateиautoDelegateоставались согласованы.