我已经找到了解决办法,迫使流星<的行为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
的渲染方法,这个工程就像流星< 0.8。
这是可行的,因为:
在初始化中,只调用handler1。这将变量“loading”设置为true。
之后,我有一个if-then-else在初始状态显示加载文本。因为条件是由具有副作用的助手计算的(将会话变量加载设置为false),所以在此之后立即调用它。
因此,如果我加载另一个视频网址的另一个完全相同的页面,它需要重新运行handler1,将session变量再次设置为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
如果_id变化的时候,视频的变化,那么你可以使用{{#每个}}块显示它不会重用DOM元素,这意味着会发生'render'事件。讨论[这里](https://groups.google.com/forum/#!searchin/meteor-talk/$23each$20video%7Csort:date/meteor-talk/bheOi3EmPeE/VsI_8sD0zAEJ)。 – user728291