¿Por qué mi viewbox no cambia de tamaño correctamente después de eliminar un elemento del conjunto?

Aquí hay un trabajo jsviolín ejemplo.

Básicamente ingresas un número y presionas "Agregar". Se generará una fila que contenga esa cantidad de cuadros usando Raphael y el cuadro de visualización cambiará de tamaño para ajustarse a las filas. Agregue más filas y el cuadro de vista cambiará de tamaño nuevamente. Esto funciona bien.

Mi problema es que después de crear los cuadros, agrego un objeto de eliminación al final de la fila. Hacer clic aquí debería simplemente eliminar la fila. Parece que funciona bien, excepto que una vez que elimino una fila al intentar agregar una nueva, el cuadro de visualización se reducirá con el mensaje de la consola.

Unexpected value 10 0 NaN NaN parsing viewBox attribute.

Sé que el error proviene de las siguientes dos líneas de código:

var sectionSize = section.getBBox();
paper.setViewBox(sectionSize.x, sectionSize.y, sectionSize.width, sectionSize.height, true);

sin que importe sectionSize.width y .height son NaN, pero no sé por qué. ¿No estoy eliminando la fila correctamente?

Código completo:

$(window).load(function() {

    var paper = Raphael("container", 600, 500);
    var section = paper.set();
    var rowCount = 0;
    var boxSize = 15;
    var boxPadding = 5;
    var pathString = " m0,0 h" + boxSize + ", v" + boxSize + " h-" + boxSize + " v-" + boxSize + " z";

    $("#add-row").click(function() {
        var row = paper.set();

        for (var i = 0; i < $("#count").val(); i++) {
            var x = ((boxSize + boxPadding) * i) + (boxPadding * 2);
            var y = ((boxSize + boxPadding) * rowCount);

            var transformString = "t" + x + "," + y + ", s1,1,0,0 r0,0,0";

            var box = paper.path(pathString).transform(transformString);
            box.attr({
                fill: "red",
                stroke: "black",
                cursor: "pointer"
            });
            row.push(box);

            if (i == $("#count").val() - 1) {
                var del = paper.text(((box.getBBox().width + x) + boxPadding), ((box.getBBox().height / 2) + y), "x");
                del.click(function() {
                    row.remove();
                });

                row.push(del);
            }
        }

        rowCount++;
        section.push(row);

        // Resize ViewBox
        var sectionSize = section.getBBox();
        paper.setViewBox(sectionSize.x, sectionSize.y, sectionSize.width, sectionSize.height, true);

    });
});

HTML

<input type="text" id="count" value="3" />
<button id="add-row">Add</button>

<div id="container" style="border: 1px solid black;">
</div>

preguntado el 22 de mayo de 12 a las 20:05

1 Respuestas

Aparentemente no estaba eliminando el elemento correctamente. Tuve que quitarlo de la section establecido antes de eliminar el elemento en sí, de lo contrario, cualquier llamada a getBBox daría como resultado que el ancho y la altura fueran NaN.

del.click(function() {
  section.splice($.inArray(row, section), 1);
  row.remove();
});

contestado el 23 de mayo de 12 a las 17:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.