插件函数'未定义'与drupal行为

时间:2012-03-25 04:09:30

标签: jquery drupal jquery-plugins

我无法在drupal模块中正常执行函数。这是projekktor HTML5视频播放器的第三方集成。我无法在drupal.org上找到任何有用的信息。

(function($) {

Drupal.behaviors.projekktor = {
  attach: function(context, settings) {
    if ($(settings.projekktor.instances).length) {
      $('[id^="projekktor-"]', context).once('projekktor', function() {
        $(this).each(function() {
          var id = $(this).attr('id');
          var jsoptions = settings.projekktor.instances[id];
          var jspath = settings.projekktor.jspath;
          // @WTF: returns 'projekktor is not defined' if $.get isn't used
          $.get(jspath, function() {
            projekktor('#' + id, jsoptions);
          });
        });
      })
    }
  }
};

})(jQuery);

projekktor库正在加载。但由于某种原因,除非我还在$ .get函数中添加库,否则播放器不会初始化。这导致事情变得非常缓慢。

设置包含从php传递的数组。 'jspath'只是库文件的一个字符串。 'jsoptions'是球员的选择。那部分工作正常。我无法让玩家正确启动。

它从内联$(文档).ready函数初始化正常。但这不是一个可行的选择。

有什么想法吗?

修改 我发现为什么在查看未经明确的projekktor代码之后这不起作用。似乎函数声明如下:

jQuery(function($) {
    projekktor = $p = function() {
        /* projekktor code in here */
    }
});

这是文档就绪范围内的函数声明。

所以现在我有点不知道如何使用标题脚本(没有$ .get)在我的函数中触发它。

鉴于它是第三方库被集成到drupal模块中,我有点麻烦。

1 个答案:

答案 0 :(得分:0)

在dom准备就绪后声明全局projekktor。所以你应该在dom准备好之后使用它。将代码放入dom ready回调函数中。

尝试:

(function ($) {
    $(function () {
        Drupal.behaviors.projekktor = {
            attach: function (context, settings) {
                if ($(settings.projekktor.instances).length) {
                    $('[id^="projekktor-"]', context).once('projekktor', function () {
                        $(this).each(function () {
                            var id = $(this).attr('id');
                            var jsoptions = settings.projekktor.instances[id];
                            var jspath = settings.projekktor.jspath;
                            projekktor('#' + id, jsoptions);
                        });
                    })
                }
            }
        };
    });
})(jQuery);

或者只是:

jQuery(function ($) {
    Drupal.behaviors.projekktor = {
        attach: function (context, settings) {
            if ($(settings.projekktor.instances).length) {
                $('[id^="projekktor-"]', context).once('projekktor', function () {
                    $(this).each(function () {
                        var id = $(this).attr('id');
                        var jsoptions = settings.projekktor.instances[id];
                        var jspath = settings.projekktor.jspath;
                        projekktor('#' + id, jsoptions);
                    });
                })
            }
        }
    };
});