2014-10-24 4 views
0

Я стараюсь это:Метод объекта в качестве обработчика

function MovableLine (line, number) { 
    this.line = line; 
    this.number = number; 
} 

MovableLine.prototype.start = function (e) { 

    alert(this.number); 
    alert(this); 
}; 

, а затем:

var mline = this.xAxis[0].plotLinesAndBands[plotLinesCount].svgElem; 
       mline.css({ 
        'cursor': 'pointer' 
       }); 
       mline.translate(0, 0); 
       movableLine = new MovableLine(mline, 10); 
       movableLine.line.on('mousedown', movableLines[plotLinesCount].start); 

результата:
первого предупреждения: не определенно
второго предупреждения: объект SWGPathElement

Как получить мой объект movableLine от start()?

+0

Где вы создаете и добавление к движимым линиям? – dug

ответ

0

Я бы рекомендовал не использовать прототип для методов событий. Назначение функции в качестве свойства объекта, а также кэшировать this ссылки:

function MovableLine (line, number) { 
    var self = this; //Caching 
    this.line = line; 
    this.number = number; 
    this.start = function (e) { 

     alert(self.number); 
     alert(self); 
    }; 
} 

В качестве альтернативы, вы можете использовать щелчок ловец, если вы абсолютно хотите использовать .prototype:

function MovableLine (line, number) { 
    var self = this; //Caching 
    this.line = line; 
    this.number = number; 
    this.clickCatcher = function() { 
     self.start.apply(self, Array.prototype.slice.call(arguments, 0)); 
    }; 
} 

MovableLine.prototype.start = function (e) { 

    alert(this.number); 
    alert(this); 
}; 

//And you event binding: 
movableLine.line.on('mousedown', movableLines[plotLinesCount].clickCatcher); 
Смежные вопросы