Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery drupal行为的插件函数“未定义”_Jquery_Drupal_Jquery Plugins - Fatal编程技术网

Jquery drupal行为的插件函数“未定义”

Jquery drupal行为的插件函数“未定义”,jquery,drupal,jquery-plugins,Jquery,Drupal,Jquery Plugins,我无法在drupal模块中正确执行函数。它是为projekktor HTML5视频播放器的第三方集成而设计的。我在drupal.org上找不到任何有用的信息 (function($) { Drupal.behaviors.projekktor = { attach: function(context, settings) { if ($(settings.projekktor.instances).length) { $('[id^="projekktor-"]', c

我无法在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'是播放器选项。那部分很好用。我就是不能让玩家正确地开火

它通过内联$document.ready函数初始化OK。但这并不是一个可行的选择

有什么想法吗

编辑: 在查看了未统一的projekktor代码后,我发现了为什么这不起作用。函数的声明如下:

jQuery(function($) {
    projekktor = $p = function() {
        /* projekktor code in here */
    }
});
它是文档就绪范围中的函数声明

因此,现在我有点不知所措,不知道如何在没有$.get的情况下使用头脚本在函数中启动它

考虑到它是集成到drupal模块中的第三方库,我有点束手无策

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

尝试:

或者只是:

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

谢谢你的建议。我以前试过第二个建议,但没有用。第一个建议也是不快乐。这些脚本没有抛出错误,但是播放器没有初始化。我发现了问题,并修复了它。projekktor库封装在文档就绪函数中。通常像这样的库是在一个自动执行函数中。Drupal有jquery once,DrupalJS也有一个文档就绪函数。因此,projekktor库需要在jquery之前的页面上显示一次。@user1290816请将您的解决方案作为单个答案发布,并在答案处标记它好吗?这将以适当的方式向其他用户展示正确的解决方案。谢谢
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);
                    });
                })
            }
        }
    };
});