瓦工.js加载失败。在WordPress中无法调用'create'(Outerlayer)的未定义对象。

15

所以我遇到一个奇怪的问题,似乎在其他地方都找不到关于masonry.js的解决方法。

我使用了最新版本(3.10)并将其包含在我的WordPress主题的functions.php文件中,代码如下:

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');

它可以成功地加载脚本。目前为止,我没有对它进行任何其他操作,但是脚本失败了:

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

似乎无法在 window.Outerlayer 上调用 create 方法,因为它不存在。

以下是相关代码,从 masonry.js 的第34行开始:

// 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;
  };

我尝试了不同的方法来排队脚本,以及仅在$(document).ready()时拉取它(我相信WordPress' enqueue_script也是这样做的?)。

那么,有人对这里的问题或冲突有任何想法吗?或者有人遇到过类似的情况吗?

(我正在使用jQuery 1.83,尽管根据该网站的说法,masonry不需要jQuery。)


我也遇到了同样的问题 - 你最终解决了吗? - timshutes
@timshutes 刚刚,实际上,如果您直接在模板中包含脚本和要执行的代码,则似乎可以正常工作,即不使用WordPress enqueue_script。我将进一步研究一下,看看为什么会这样。但现在先试试这个方法。 - josh
我一直在尝试解决这个问题。在第37行有一个调用不同库中函数的语句(导致了错误)。我将发布完整的答案,看看是否有所帮助。 - timshutes
1个回答

33

我遇到过这个问题。我猜你可能仅使用了GitHub上的原始masonry.js文件。 这个版本的masonry需要一些其他插件才能正常工作。

具体来说,您收到此错误是因为您没有安装Outlayer。如果您只想让masonry运行起来,您应该从这里的masonry网站获取完整的生产包。它包括必要的插件。

希望这能帮助到您!


1
那就是正在发生的事情。谢谢。 - josh
是的,我也一样。谢谢! - Astrotim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接