我有以下问题场景。我的页面使用SystemJS加载js模块。在SystemJS加载了所有js模块之后,所有必需的js模块都可用于调用DataLoader.LoadData()。
我的页面加载外部svg。页面完全加载外部svg后,需要调用DataLoader.LoadData()来对svg元素执行操作:
<div id="divMapContainer"><object id="imgMap" data="map.svg" type="image/svg+xml" onload="DataLoader.LoadData();"></object>
所以这是我的问题:
如果我使用onload =“DataLoader.LoadData();”在上面的div中的方法然后不能保证SystemJS将完成它导入所需的js模块。在这种情况下,DataLoader.LoadData()将失败,因为并非所有必需的js模块都可用。
如果我在SystemJS完成导入所需的js模块后简单地调用DataLoader.LoadData(),则无法保证svg导入已完成。由于DataLoader.LoadData()对svg的特定元素执行操作,因此如果svg尚未完成加载,此函数将失败。
那么管理这种情况的解决方案是什么?它似乎可能是观察者或发布/订阅模式?应该使用jQuery.Callbacks吗?我为此审查了jquery文档但由于某种原因,具体的代码解决方案对我来说并不清楚。
=============================================== =========================
这是此问题的潜在解决方案的开始。
当svg加载时,它的onload()事件可以设置LoadDataPreconditions.SvgLoaded = true
var LoadDataPreconditions = { ImportsLoaded:true, SvgLoaded:真实的 }
当LoadDataPreconditions对象发生更改时,某些类型的onchange侦听器可以连接到LoadDataPreconditions以执行以下函数:
function LoadDataConditional()
{
var importsLoaded = LoadDataPreconditions.ImportsLoaded;
var svgLoaded = LoadDataPreconditions.SvgLoaded;
if(importsLoaded && svgLoaded) DataLoader.LoadData;
}
这看起来像是一种合理的方法吗?我该如何实现这个连线?