2014-04-13 43 views
0

此前我使用渲染函數來初始化videoJS,當Video Changed時。VideoJS with Meteor 0.8 Blaze

Now in Meteor 0.8。渲染僅在模板創建時觸發一次。

問題是:模板用在每個頁面中,我瀏覽過,因此它永遠不會被重新渲染,只是改變了屬性。

有沒有辦法讓VideoJS在Meteor 0.8上工作?

  • 喜歡的東西呈現函數模板字段將觸發總是
  • 或辦法迫使完整的模板重新呈現一個輔助的內容插入時運行的回調
  • 或方式。
+1

如果_id變化的時候,視頻的變化,那麼你可以使用{{#每個}}塊顯示它不會重用DOM元素,這意味着會發生'render'事件。討論[這裏](https://groups.google.com/forum/#!searchin/meteor-talk/$23each$20video%7Csort:date/meteor-talk/bheOi3EmPeE/VsI_8sD0zAEJ)。 – user728291

回答

0

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