我已經找到了解決辦法,迫使流星<的行爲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