MS AJAX add_init и Sys.loadScripts - PullRequest
       3

MS AJAX add_init и Sys.loadScripts

1 голос
/ 16 марта 2011

Кто-нибудь пробовал использовать новый загрузчик скриптов 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, мне пришлось бы свернуть свой собственный код инициализации. Как правильно справиться с этим сценарием?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...