SmoothState和Wordpress。为玩家和Google Chart回调的功能是什么?

时间:2014-09-19 12:18:18

标签: javascript wordpress google-visualization

我认为这是一个纯粹的技术问题,即使我说的是在这种情况下使用wordpress以及特定的插件和短代码。

我在Wordpress SmoothState.js中使用。一切正常,除了两件事:

1 - 使用Google Charts的wordpress的“Visualizer”或“Inline Google Spreadsheet Viewer”插件。我找不到调用“回调”的函数。

2 - 使用MediaElement Wordpress时,同样适用于带有原生短代码和短代码的播放列表的原生音频播放器。出现在第一页,但后来我不知道在回调时要调用什么来重新显示玩家。

如何解决?

也许我可以发布更具技术性的内容,但如果我知道在哪里寻找要调用的函数,我就不会在这里发布这个问题了。

1 个答案:

答案 0 :(得分:0)

我看到您正在使用jQuery的isFired控件,如博文SmoothState.js & WordPress (h / t:this Github issue

在该帖子的评论中,作者说:

  

是的,这就是我要进入插件找到已注册的脚本然后取消注册并注册它们有点痛苦但是目前我不认为还有另一种方法可以做到这一点。

     

理想的解决方案是编写能找到所有已注册脚本的内容并将其全部加载而不重复它们。

我使#2 工作的目的是在我将SmoothState排入队列时将MediaElement排入队列:

wp_enqueue_style( 'wp-mediaelement' );
wp_enqueue_script( 'wp-mediaelement' );

当页面上有媒体短代码时,WP只会将其排队。如果我们从没有它的另一个页面开始,当SS加载包含media元素的页面时,脚本不会入队。

我的日历插件有同样的问题#1 ,除了在我的SS上排队脚本之外,我还必须在回调中启动主函数(声明为全局),见下文。观察:

  • 它取决于每个插件;
  • 我不确定在每次回调时调用这个全局函数是否是个好主意;
  • 如果您不想hack the plugins JS files,可以取消注册/出列其JS文件并将您自己的文件排入队列;
  • 当你正在操纵其他插件行为时,你应该create a plugin来处理你的SmoothState,从functions.php工作不会削减交易。

FullCalendar插件(简化):

var editor_data = new Function();

jQuery(document).ready(function($)
{
    editor_data = function(){
        $('#calendar').fullCalendar({ options });
    }
    editor_data();
}); 

SmoothState插件(简化):

jQuery(document).ready(function($) {
    var $body = $('html, body'),
    content = $('#page').smoothState({
        onEnd : {
            duration: 0, // Duration of the animations, if any.
            render: function (url, $container, $content) {
                $container.html($content);
                $(document).ready();
                $(window).trigger('load');
            }
        },
        callback: function(url, $container, $content) {
            editor_data();
        }
    }).data('smoothState');
});

(function($, undefined) {
    var isFired = false;
    var oldReady = jQuery.fn.ready;
    $(function() {
        isFired = true;
        $(document).ready();
    });
    jQuery.fn.ready = function(fn) {
        if(fn === undefined) {
            $(document).trigger('_is_ready');
            return;
        }
        if(isFired) {
            window.setTimeout(fn, 1);
        }
        $(document).bind('_is_ready', fn);
    };
})(jQuery);