Кто-нибудь пробовал использовать новый загрузчик скриптов AJAX для загрузки зависимостей Sys.Component?
Например, у меня есть IScriptControl, который создается при загрузке страницы с помощью $ create, но компонент зависит от другого файла, который загружается асинхронно с помощью Sys.loadScripts ().
Blah.js:
Type.registerNamespace('Blah');
MyComponent.js:
Sys.loadScripts(['blah.js'], function() {
Blah.MyComponent = function() {
Blah.MyComponent.initializeBase(this);
};
Blah.MyComponent.prototype = {
// ...
};
Blah.MyComponent.registerClass('Blah.MyComponent', Sys.Component);
});
MyPage.aspx:
<script type="text/javascript" src="MyComponent.js"></script>
<script type="text/javascript">
Sys.Application.add_init(function() {
$create(Blah.MyComponent, ...);
// This fails, because it runs before MyComponent has been initialized, which in turn is waiting for blah.js to load
});
</script>
Похоже, что событие Sys.Application.init
не ожидает завершения загрузки каких-либо сценариев синхронизации и Sys.loadScripts
не блокируется, поэтому инициализация завершается неудачей.
Я мог бы взломать функцию add_init для асинхронной загрузки скрипта компонента, например ::
Sys.Application.add_init(function() {
// load component asynchronously
Sys.loadScripts(['MyComponent.js'], function() {
$create(...);
});
});
Возможно, это сработает, но кажется, что это неправильно. Вместо того, чтобы просто вызывать ScriptManager.RegisterScriptControl
, мне пришлось бы свернуть свой собственный код инициализации. Как правильно справиться с этим сценарием?
Спасибо!