Метод createjs.Stage возвращает ошибку с помощьюEaseljs

Когда я получаю холст и отправляю для создания сцены, я получаю эту строку с ошибкой:

Uncaught TypeError: Cannot call method 'addEventListener' of undefined.

Моя функция инициализации:

function init() {
    canvas = document.getElementById("testCanvas");

    stage = new createjs.Stage(canvas);
    screen_width = canvas.width;
    screen_height = canvas.height;

    contentManager = new ContentManager();
    contentManager.SetDownloadCompleted(startGame);
    contentManager.StartDownload();
}

Блок кода, выдающий ошибку:

p.enableDOMEvents = function(enable) {
    if (enable == null) { enable = true; }
    var n, o, ls = this._eventListeners;
    if (!enable && ls) {
        for (n in ls) {
            o = ls[n];
            o.t.removeEventListener(n, o.f);
        }
        this._eventListeners = null;
    } else if (enable && !ls) {
        var t = window.addEventListener ? window : document;
        var _this = this;
        ls = this._eventListeners = {};
        ls["mouseup"] = {t:t, f:function(e) { _this._handleMouseUp(e)} };
        ls["mousemove"] = {t:t, f:function(e) { _this._handleMouseMove(e)} };
        ls["dblclick"] = {t:t, f:function(e) { _this._handleDoubleClick(e)} };
        t = this.canvas;
        if (t) { ls["mousedown"] = {t:t, f:function(e) { _this._handleMouseDown(e)} }; }

        for (n in ls) {
            o = ls[n];
            o.t.addEventListener(n, o.f);
        }
    }

особенно этот блок:

    for (n in ls) {
        o = ls[n];
        o.t.addEventListener(n, o.f);
    }

Когда значение «n» равно BitmapAnimation_initialize, выдает ошибку. Я нашел этот код в Stage.js, этот файл сопровождает rar-файл, установленный в Easeljs v0.6.0.


person Douglas Ramalho    schedule 25.04.2013    source источник


Ответы (3)


Вы видите эту ошибку, если закомментируете код contentManager? Кажется странным.

person sebastian.derossi    schedule 26.04.2013

canvas = document.getElementById("testCanvas");

У вас действительно есть элемент DOM с идентификатором «testCanvas»?

Я получил эту ошибку при создании своего первого приложения EaselJS, потому что у меня была опечатка в идентификаторе...

person Deepak Joy Cheenath    schedule 19.06.2013

Возможно, вы что-то добавили к прототипу object (я тоже). Цикл javascript for-each не различает «настоящие» свойства и свойства-прототипы.

@разработчики этой библиотеки: по рекомендации Дугласа Крокфорда (см. ссылку), цикл должен проверять сначала свойства:

for (n in ls) {
  if (ls.hasOwnProperty(n)) {
    o = ls[n];
    o.t.addEventListener(n, o.f);
  } 
}
person user2043423    schedule 29.08.2014