3

我目前正在使用 Sitecore 7.2 (MVC) 进行渲染,该渲染将显示一个 jwPlayer,并给出一个视频链接(在媒体库中或来自外部源,如 YouTube)。当我通过内容编辑器中的演示详细信息添加渲染(使用有效数据源)时,一切看起来都很好,并且运行良好。但是,我现在遇到的问题是,当我尝试从页面编辑器(使用完全相同的呈现和数据源)执行相同的操作时,该占位符中根本没有显示任何内容。

处理视频的渲染部分如下:

@if (Model.VideoLink != null && Model.Image != null)
{
    var vidid = Guid.NewGuid().ToString();
    <div class="article-video-module">
        <p class="video-placeholder-text">@Html.Raw(Model.Heading)</p>
        <div id="@vidid">Loading the player...</div>
        <script type="text/javascript">
            jwplayer("@vidid").setup({
                file: "@Model.VideoLink.Url",
                image: "@Model.Image.Src",
                width: "100%",
                aspectratio: "16:9",
                sharing: {
                    link: "@Model.VideoLink.Url"
                },
                primary: 'flash'
            });
            jwplayer('videodiv-@vidid').onPlay(function () {
                $(this.container).closest('.fullbleed-video-module').find('.video-placeholder-text').hide();
            });
            jwplayer('videodiv-@vidid').onPause(function () {
                $(this.container).closest('.fullbleed-video-module').find('.video-placeholder-text').show();
            });
        </script>
    </div>

    @Editable(a => Model.Description)
}

其他可能有帮助的事情:

  • 当我注释掉<script>上面标签中的所有内容时,渲染完美地显示出来。
  • 在页面上找到了对 jwplayer.js 的引用(这是我的第一个想法)

Javascript 中的控制台错误:

  • No suitable players found and fallback enabled在 jwplayer.js 上
  • Uncaught TypeError: undefined is not a function从上面开始jwplayer("@vidid").setup({jwplayer('videodiv-@vidid').onPlay(function () {

我怎样才能让 jwPlayer 和 Page Editor 相互配合?

4

2 回答 2

4

我不排除与页面编辑器使用的 JQuery 版本发生冲突 - 这通常会使事情变得混乱。这里有一个很好的帖子来克服这些问题。

http://jrodsmitty.github.io/blog/2014/11/12/resolving-jquery-conflicts-in-page-editor/

于 2015-02-16T17:30:51.603 回答
4

问题是,当您通过 添加组件时Page Editor,脚本会在 div<div id="@vidid">元素添加到 DOM 之前触发。不要问我为什么...

解决方案非常简单:用if条件包装你的 javascript 代码,检查 div 是否已经存在:

<script type="text/javascript">
    if (document.getElementById("@vidid")) {
        jwplayer("@vidid").setup({
            file: "@Model.VideoLink.Url",
            image: "@Model.Image.Src",
            width: "100%",
            aspectratio: "16:9",
            sharing: {
                link: "@Model.VideoLink.Url"
            },
            primary: 'flash'
        });
        jwplayer('videodiv-@vidid').onPlay(function () {
            $(this.container).closest('.fullbleed-video-module').find('.video-placeholder-text').hide();
        });
        jwplayer('videodiv-@vidid').onPause(function () {
            $(this.container).closest('.fullbleed-video-module').find('.video-placeholder-text').show();
        });
    }
</script>

您的代码还有另一个问题 - Guid 可以以数字开头,这不是 html 元素的有效 id。您应该将代码更改为:

var vidid = "jwp-" + Guid.NewGuid().ToString();
于 2015-02-16T19:51:59.307 回答