2014-04-13 45 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 
相关问题