【问题标题】:Wisita onReady event firing multiple times in Angular controllerWistia onReady 事件在 Angular 控制器中多次触发
【发布时间】:2017-05-21 12:11:27
【问题描述】:

寻求一些帮助,了解如何防止 onReady 在与 $window 结合使用时在 Angular/Ionic 应用程序中多次触发。具体来说,我们将这种方法用于 Wistia 视频(按照指示 here)。违规代码是:

$window._wq = $window._wq || [];
$window._wq.push({ id: "5bbw8l7kl5", onReady: function(video) {
    console.log("I got a handle to the video using Wistia's onReady method!", video.uuid);
}});

使用$window._wq 会导致多次执行onReady 方法,这是怎么回事?

我们如何使这段代码对 Angular 友好(无需“破解”或强制变通),以便 onReady 在每次重新访问控制器视图时只触发一次?

如果您愿意,我提供了一些示例代码,可用于在本地重现问题here

任何见解、想法、想法将不胜感激!

【问题讨论】:

  • 您使用的是iframe 嵌入还是定向嵌入?
  • @GentlemanMax:我们正在使用标准的 JS 嵌入选项,如 here 所述。没有iframes

标签: javascript angularjs ionic-framework wistia window-object


【解决方案1】:

这些是可能导致问题的选项
1.我认为您有多个具有相同 ID 的视频。
2.在api页面他使用_wq.push而不是$window._wq.push
3. 您使用的是 Angular,您是否检查过您有两个具有相同 ng-model 或 ng-click 事件的视频

【讨论】:

  • 感谢您的回复,尼瓦斯。我们遵循 Wistia 指令here。我们使用单个divclass="wistia_embed wistia_async_5bbw8l7kl5" 进行实际嵌入,然后在控制器中,我们使用$window._wq 按照Wistia 的指令here 来获取视频播放器,以便我们可以执行额外的在视频初始化时起作用。所以,我认为我们不会在任何地方使用多个视频?
  • 另外,关于_wq.push$window._wq.push 的公平点,但我的理解是任何附加到$window 的对象都会变成一个全局对象,所以我认为它们实际上是同一件事。或者,至少,我在我的代码中都尝试了,但没有任何效果 - 仍然看到同样的问题。
【解决方案2】:

您可能有多个这样的匿名函数回调浮动。我建议将 onReady 回调提取到一个单独的函数中,并将该函数传递给对象中的 onReady。

$window._wq = $window._wq || [];
$window._wq.push({ id: "5bbw8l7kl5", onReady: onReadyCallback });
var onReadyCallback = (video) => { console.log('I got a handle to the video using Wistia's onReady method!', video.uuid };

这将帮助您至少将代码与匿名函数隔离开来,并隔离函数的调用者,这将帮助您追踪多个事件触发的根本原因。您可能在范围内也有多个控制器实例,但我没有任何 Wistia 或 Ionic 经验。

【讨论】:

  • 很好的建议。我们会试一试,看看它是否能把我们带到任何地方。非常感谢!
  • @raie,您对此有进一步了解吗?我有同样的问题,但使用 React
猜你喜欢
  • 2017-04-29
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 2014-04-20
  • 1970-01-01
  • 2018-11-18
  • 2019-06-20
  • 2015-01-28
相关资源
最近更新 更多