В своем проекте который я недавно начал, я решил использовать TypeScript + jQuery. Настроил динамическую загрузку скриптов с помощью systemJS, все очень круто. И вот первые грабли, есть у меня класс меню со св-вами menu, detailsMenuContainer, state, которые заполняются в конструкторе, и вешаются обработчики - внутри обработчиков они становятся недоступны, и тогда мне пришлось их сделать статичными:
export class Menu{
private static menu;
private static detailsMenuContainer;
private static state :boolean = false;
constructor(){
Menu.menu = $(MENU);
Menu.detailsMenuContainer = $(DETAILS_MENU_CONTAINER);
fn.setOnDocumentListener('mousemove',MENU_EVENT_NAME,null,this.mousePosChecker);
}
public static showMenu(){
Menu.state = true;
Menu.menu.prop('class',ACTIVE_MENU_STATE_CLASS);
Menu.detailsMenuContainer.prop('class',ACTIVE_MENU_STATE_CLASS);
}
public static hideMenu(){
Menu.state = false;
Menu.menu.prop('class',INACTIVE_MENU_STATE_CLASS);
Menu.detailsMenuContainer.prop('class',INACTIVE_MENU_STATE_CLASS);
}
private mousePosChecker(e){
let posX = e.clientX, posY = e.clientY, controlStateSize = CONTROL_STATE_INACTIVE;
if(Menu.state) controlStateSize = CONTROL_STATE_ACTIVE;
if(posY > CONTROL_TOP_STATE && posX < controlStateSize && !Menu.state){
Menu.showMenu();
}else if((posY < CONTROL_TOP_STATE || posX > controlStateSize) && Menu.state){
Menu.hideMenu();
}
}
}
т.е. если они будут не static, то внутри обработчиков они будут undefined!
Объясните мне почему так происходит? И могу ли я каким-либо образом сделать их не статичными? Ведь это очень неудобно!!!
bind, то потеряется возможность удаления хендрера, так как этот метод возвращает каждый раз новую функцию. придется в конструкторе присваивать переменной, что сравняет оба способа, но указанный мной красивее выглядит и только, хотя возможно её и быстрее работает. ведь это не бедаts, ему эта проблема досталась отjs. – user220409 Sep 26 '16 at 09:51$smth.on('click.some-my-namespace', function () { /*...*/ });- подписались.$smth.off('click.some-my-namespace');- отписались только от своего (за счёт пространстваsome-my-namespace). – Qwertiy Sep 26 '16 at 11:28