Ошибка выдачи переменной 'undefined', не может понять - PullRequest
10 голосов
/ 12 января 2012

Я использую Raphael.js.Каждый раз, когда я загружаю страницу, я получаю сообщение об ошибке:

con is undefined
x = con.x

Я искал con в документации Raphael, и вот что я нашел:

var con = R._getContainer.apply(0, arguments),
    container = con && con.container,
    x = con.x,
    y = con.y,
    width = con.width,
    height = con.height;
    //...

con здесь четко определеноВот код, который я пытаюсь загрузить:

var paper = new Raphael(ele('canvas_container'), 500, 500);

window.onload = function() {
            var circle = paper.circle(100,100,100);
            for (i = 0; i < 5; i++) {
                var multiplier = i * 5;
                paper.circle(250 + (2 * multiplier), 100 + multiplier, 50 - multiplier);
            }
    }

Кто-нибудь еще получил эту ошибку?Это ошибка в версии Рафаэля, которая у меня есть, или есть какая-то другая проблема?

Ответы [ 2 ]

10 голосов
/ 12 января 2012

Попробуйте переместить экземпляр бумаги в функцию загрузки вашего окна:

window.onload = function() {
    var paper = new Raphael(ele('canvas_container'), 500, 500);
    var circle = paper.circle(100,100,100);
    for (i = 0; i < 5; i++) {
        var multiplier = i * 5;
        paper.circle(250 + (2 * multiplier), 100 + multiplier, 50 - multiplier);
    }
}

Если вы попытаетесь получить элемент по его идентификатору до того, как DOM будет готов, getElementById ничего не вернет. Как вы можете видеть здесь , пробный код на пустом документе показывает тот же результат.

1 голос
/ 10 сентября 2014

Raphael.js ожидает, что на странице будет жестко закодированный HTML-элемент с названием холста Raphael (то есть: "canvas_container").Если элемент HTML создается во время выполнения (динамически в вашем коде JavaScript), он выдаст эту ошибку.

R._engine.create = function () {
    var con = R._getContainer.apply(0, arguments),
        container = con && con.container,
        x = con.x,
        y = con.y,
        width = con.width,
        height = con.height;
    if (!container) {
        throw new Error("SVG container not found.");
    }
    var cnvs = $("svg"),
        css = "overflow:hidden;",
        isFloating;
    x = x || 0;
    y = y || 0;
    width = width || 512;
    height = height || 342;
    $(cnvs, {
        height: height,
        version: 1.1,
        width: width,
        xmlns: "http://www.w3.org/2000/svg"
    });
    if (container == 1) {
        cnvs.style.cssText = css + "position:absolute;left:" + x + "px;top:" + y + "px";
        R._g.doc.body.appendChild(cnvs);
        isFloating = 1;
    } else {
        cnvs.style.cssText = css + "position:relative";
        if (container.firstChild) {
            container.insertBefore(cnvs, container.firstChild);
        } else {
            container.appendChild(cnvs);
        }
    }
    container = new R._Paper;
    container.width = width;
    container.height = height;
    container.canvas = cnvs;
    container.clear();
    container._left = container._top = 0;
    isFloating && (container.renderfix = function () {});
    container.renderfix();
    return container;
};
...