Masonry.js falla al cargar. No se puede llamar a ‘crear’ de indefinido (capa exterior) en WordPress

2 minutos de lectura

avatar de usuario
jose

Así que tengo un problema extraño que parece que no puedo encontrar en ningún otro lado, con respecto a masonry.js.

Tengo la última versión (3.10) y lo incluyo en el archivo functions.php de mi tema de wordpress así:

function enqueue ()
{
    wp_register_script( 'masonry', get_stylesheet_directory_uri() . '/js/masonry.js', array( 'jquery' ) );
    wp_enqueue_script( 'masonry' );
}

add_action( 'wp_enqueue_scripts', 'enqueue');

Que está cargando bien el script. Tal como está ahora, no estoy haciendo cualquier cosa else con él, pero el script está fallando:

Uncaught TypeError: Cannot call method 'create' of undefined masonry.js?ver=3.5.2:37

Parece que no puede llamar a crear en la ventana. La capa exterior ya que no existe.

Aquí está el código en cuestión, comenzando en la línea 34 de masonry.js:

// used for AMD definition and requires
function masonryDefinition( Outlayer, getSize ) {
  // create an Outlayer layout class
  var Masonry = Outlayer.create('masonry');

  Masonry.prototype._resetLayout = function() {
    this.getSize();
    this._getMeasurement( 'columnWidth', 'outerWidth' );
    this._getMeasurement( 'gutter', 'outerWidth' );
    this.measureColumns();

    // reset column Y
    var i = this.cols;
    this.colYs = [];
    while (i--) {
      this.colYs.push( 0 );
    }

    this.maxY = 0;
  };

Intenté poner en cola el script de diferentes maneras, así como extraerlo solo cuando $(document).ready() (¿lo cual creo que enqueue_script de wordpress hace de todos modos?).

Entonces, ¿alguien tiene alguna idea de cuál podría ser el problema o conflicto aquí? O alguien ha experimentado algo similar?

(Estoy usando jQuery 1.83, aunque la mampostería no debería requerir jquery según el sitio).

  • Tengo este mismo problema, ¿alguna vez lo resolviste?

    – Timshutes

    13 de agosto de 2013 a las 5:16

  • @timshutes Ahora mismo, parece funcionar si incluye tanto el script como el código para ejecutarlo directamente en una plantilla, es decir, no con wordpress enqueue_script. Voy a investigar esto un poco más y ver si puedo descifrar por qué esto funciona. Pero pruébalo por ahora.

    – jose

    15 de agosto de 2013 a las 10:16

  • Jugué con esto para siempre. Hay una llamada en la línea 37 allí (donde obtienes el error) a una función de una biblioteca diferente. Voy a publicar una respuesta completa y ver si esto ayuda.

    – Timshutes

    15/08/2013 a las 20:36

Yo tuve el mismo problema. Supongo que está usando solo el archivo raw masonry.js de github. Esta versión de mampostería requiere algunos otros complementos para funcionar correctamente.

Específicamente, recibe este error porque no tiene Outlayer instalado. Si solo está buscando poner en funcionamiento la mampostería, debe obtener el paquete de producción completo de la sitio web de albañilería aquí. Incluye los complementos necesarios.

¡Espero que esto ayude!

  • que es que esta pasando. GRACIAS

    – jose

    16 de agosto de 2013 a las 9:14

  • Sí, lo mismo para mí también. ¡Gracias!

    – Astrotim

    7 de noviembre de 2013 a las 12:16

¿Ha sido útil esta solución?