Здравствуйте, mryau, Вы писали:
CS>>Какое отношение имеет событие
CS>>Event.SELECT_SELECTION_CHANGED к function onMouse(evt) ?
CS>>В onMouse прилетают только Event.MOUSE_**** события.
M>О том и спич: в onControlEvent ничего не приходит, а в onMouse приходят SELECT_STATE_CHANGED и SELECT_SELECTION_CHANGED...
Это потому что ты вызываешь функцию VirtualTree() которая переопредляет onControlEvent:
tree.onControlEvent = function(evt)
{
if( evt.type == Event.ELEMENT_EXPANDED ) { expandOption(evt.target); return true; }
else if( evt.type == Event.ELEMENT_COLLAPSED ) { collapseOption(evt.target); return true; }
}
В Sciter event handlers назначаются двумя способами:
Первый, через property элемента или метод класса:
el.onControlEvent = function(evt) {...}
el.onMouse = function(evt) {...}
Второй, через subscription механизм:
el.subscribe(Event.BEHAVIOR_EVENT,Event.SELECT_SELECTION_CHANGED, function(evt) {...});
el.unsubscribe(func);
В первом случае последнее переопределение скажем el.onControlEvent = function() затирает
то что было до того в el.onControlEvent — т.е. элемент может иметь строго один onControlEvent handler.
Во втором случае все subscriptions добавляются в список — множество event handlers.
Вот тебе имплементация VirtualTree оформленная в виде класса (а не функции):
https://dl.dropboxusercontent.com/u/14981836/tree.rar
Твой код находится в файле draggable-virtual-tree.tis как
class DraggableVirtualTree: VirtualTree {}
Методы (класса VirtualTree) которые ты можешь override в своем:
// overridables:
function optionExpanded(option) {}
function optionCollapsed(option) {}
function selectionChanged() {}
А вообще я предлагаю устроить мастер-класс и прям в этом топике разработать этот самый DraggableVirtualTree ...