之前我使用渲染的功能在视频更改时初始化videoJS。
现在流星0.8。创建模板时,只会触发一次渲染。
问题是:模板在每个页面中使用,我浏览,因此它永远不会被重新渲染,只是更改了属性。
有没有办法让VideoJS在Meteor 0.8中运行?
答案 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