Jquery drupal行为的插件函数“未定义”
我无法在drupal模块中正确执行函数。它是为projekktor HTML5视频播放器的第三方集成而设计的。我在drupal.org上找不到任何有用的信息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
(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);
});
})
}
}
};
});