VideoJS与Meteor 0.8 Blaze

时间:2014-04-13 16:34:54

标签: meteor video.js

之前我使用渲染的功能在视频更改时初始化videoJS。

现在流星0.8。创建模板时,只会触发一次渲染。

问题是:模板在每个页面中使用,我浏览,因此它永远不会被重新渲染,只是更改了属性。

有没有办法让VideoJS在Meteor 0.8中运行?

  • 像总是激活的模板字段的渲染函数
  • 或强制完整模板重新渲染的方法
  • 或插入帮助程序内容时运行回调的方法。

1 个答案:

答案 0 :(得分:0)

我找到了一种强制Meteor行为的解决方案。 0.8:

制作2个处理程序:

UI.registerHelper "handler1", (data) ->
    Session.set("loading", true);

UI.registerHelper "handler2", (data) ->
    if Session.get("loading")
        Session.set("loading", false);
        return true
    else
        return false

定义2个模板:

<template name="videoPlayer">
    {{handler1 seed="videourl"}}
    {{#if handler2}}
        Loading Player...
    {{else}}
        {{> videoPlayerInternal}}
    {{/if}}
</template>

<template name="videoPlayerInternal">
    <!-- VideoJS-Player-Code -->
</template>

现在,我可以挂钩videoPlayerInternal的渲染方法,这就像meteor&lt; 0.8。

这是因为:

在Initialization中,只调用handler1。这设置变量&#34; loading&#34;为真。

之后我有一个if-then-else,在初始状态下显示加载文本。因为条件是由具有副作用的帮助器计算的(将会话变量加载设置为false),所以在此之后将立即调用它。

所以如果我用另一个视频网址加载另一个完全相同的页面,它需要重新运行handler1,再次将会话变量设置为true,从dom中删除模板并重新插入。再次调用渲染,并且它可以工作; - )

哦......当然还有渲染的方法:

Template.videoPlayerInternal.rendered = ->
    videojs.options.flash.swf = "/video-js.swf"

    # Delete old players and reset.
    if videojs.players.videoJsPlayer
        videojs.players.videoJsPlayer.dispose()


    # Initialize the player
    $vid_obj = _V_ "videoJsPlayer", {}, ()->
        console.log "video is ready.";
        return true