Polymer 如何使用聚合物生命周期挂钩

Polymer 如何使用聚合物生命周期挂钩,polymer,polymer-1.0,Polymer,Polymer 1.0,我有一个包含视频的组件。我的组件嵌套在dom中,并且可以消失。当这种情况发生时,视频和声音将继续播放 我的组件是否有一种方法可以检测从DOM中消失的Is?我已尝试使用“分离”回调,如下所述: 但是当dom删除我的元素时,如果什么都没有发生,我就看不到console.log消息。我做错了什么?这里有两种可能的情况: 您希望在条件更改时丢弃并重新创建元素 您希望将其保留在dom中,但将其冻结 在第一种情况下,如果要确保模板dom已销毁而不是隐藏,则需要将restamp属性添加到dom中。默认情况下,

我有一个包含视频的组件。我的组件嵌套在dom中,并且可以消失。当这种情况发生时,视频和声音将继续播放

我的组件是否有一种方法可以检测从DOM中消失的Is?我已尝试使用“分离”回调,如下所述:


但是当dom删除我的元素时,如果什么都没有发生,我就看不到console.log消息。我做错了什么?

这里有两种可能的情况:

您希望在条件更改时丢弃并重新创建元素

您希望将其保留在dom中,但将其冻结

在第一种情况下,如果要确保模板dom已销毁而不是隐藏,则需要将restamp属性添加到dom中。默认情况下,dom if在第一次初始化时标记模板,然后在条件变为falsy时将其从视图中隐藏

在第二种情况下,由给出的建议将不起作用,因为处于隐藏模式的dom不会从dom分离任何内容。设置restamp属性将使分离的回调运行,但由于元素将被丢弃,因此没有必要暂停任何操作。
如果要将其保留在DOM中并冻结其状态,则需要在DOM If上侦听DOM更改事件,并相应地运行.pause。

这里有两种可能的情况:

您希望在条件更改时丢弃并重新创建元素

您希望将其保留在dom中,但将其冻结

在第一种情况下,如果要确保模板dom已销毁而不是隐藏,则需要将restamp属性添加到dom中。默认情况下,dom if在第一次初始化时标记模板,然后在条件变为falsy时将其从视图中隐藏

在第二种情况下,由给出的建议将不起作用,因为处于隐藏模式的dom不会从dom分离任何内容。设置restamp属性将使分离的回调运行,但由于元素将被丢弃,因此没有必要暂停任何操作。
如果要将其保留在DOM中并冻结其状态,则需要在DOM If上侦听DOM更改事件并相应地运行.pause。

在分离的函数中,需要获取视频元素并调用.pause


您可能还需要调用。当您的条件发生变化时暂停,这将导致dom if删除播放机。

在分离的函数中,您需要获取视频元素并调用。暂停


您可能还需要调用。当您的条件发生变化时暂停,这将导致dom if删除播放机。

除了简单地使用dom if和而不是

<dom-if if="[[condietionBoolean]]">
<your-video-element id="giveanId"></your-video-element>
</dom-if>
如下面所示编写if语句,因此每次您的情况发生变化时,您都会检查并确保视频在您喜欢的时候暂停。见下文

...
<dom-if if="[[_shouldShowVideo(conditionBoolean)]]">
<your-video-element id="giveanId"></your-video-element>
</dom-if>

...

Polymer({
  is: 'my-component-with-video',

  properties: {

     conditionBoolean : {
        type: Boolean, 
     },

  },

_shouldShowVideo: function(conditionBoolean ) {
   if (!conditionBoolean) this.$$(#yourVideoElementId).pause();
   return conditionBoolean ;
}

})

除了简单地使用dom if and而不是

<dom-if if="[[condietionBoolean]]">
<your-video-element id="giveanId"></your-video-element>
</dom-if>
如下面所示编写if语句,因此每次您的情况发生变化时,您都会检查并确保视频在您喜欢的时候暂停。见下文

...
<dom-if if="[[_shouldShowVideo(conditionBoolean)]]">
<your-video-element id="giveanId"></your-video-element>
</dom-if>

...

Polymer({
  is: 'my-component-with-video',

  properties: {

     conditionBoolean : {
        type: Boolean, 
     },

  },

_shouldShowVideo: function(conditionBoolean ) {
   if (!conditionBoolean) this.$$(#yourVideoElementId).pause();
   return conditionBoolean ;
}

})

这是我打算做的,但正如卢卡斯指出的,我不需要这样做,因为如果视频真的被分离,它会自动停止。因此,在dom if上重新映射是解决方案。我不知道您是否需要它,但调用.pause的好处是您还可以找到.currentTime是什么,并将其保存下来。然后您可以在上一个.currentTime或0重新开始。这是我打算做的,但正如Lukasz指出的,我不需要这样做,因为如果视频真的被分离,它将自动停止。因此,在dom if上重新映射是解决方案。我不知道您是否需要它,但调用.pause的好处是您还可以找到.currentTime是什么,并将其保存下来。然后,您可以在上一个.currentTime或0重新开始。