如何在外部回调后在require.js内初始化主干应用程序

时间:2012-01-05 12:04:55

标签: javascript backbone.js requirejs

通常在页面加载期间使用require.js加载Backbone App

<script data-main="js/main" src="js/libs/require/require.js"></script>

加载一些依赖项,并启动应用程序。

如果您的应用需要操作DOM,您可以使用domReady插件

require(['domReady','app' ], function (domReady, App) {
  domReady(function (App) {
     App.Initialize()
  }):
});

但我的应用程序与Flash API通信。我需要等到flash插件完成加载它自己的xml。完成后,我将回调一个回调到javascript。此回调需要使用依赖项触发app.initialize(),如require.js

第一种方法和第二种方法(等待dom)不能确保flash api可用。那么如何初始化应用程序,以便app.js具有依赖性并且flash api可用。或者以不同的方式表达:如何通过javascript事件/回调

初始化require.js.

更新 显然,这就足够了:

<script data-main="js/main" src="js/libs/require/require.js"></script>
<script type="text/javascript">
    function init(){
        require(['framework/app'], function(App){
          App.initialize();
        });
    }       
</script>

flash插件可以调用window.init()来启动应用程序。不足之处就是当应用程序初始化时,jQuery会加载。在显示内容之前,这可能会导致一个小的延迟。

我想,当我在主体的头部/末尾加载jquery时,require.js将重新加载/实例化另一个jquery副本,或从cache / dom读取

2 个答案:

答案 0 :(得分:1)

您可以利用requirejs shim config,这将允许您为指定的require模块定义“导出”。此导出将是缓存在全局上下文中的值,并且可用作要使用的回调函数:

<script data-main="js/main" src="js/libs/require/require.js"></script>
<script type="text/javascript">
    requirejs.config({
        shim: {
            'framework/app': {
                exports: 'App'
            }
        }
    });
    require(['framework/app'], function(App){});
</script>

从这里,您回调javascript函数的代码只需调用:

App.initialize();

答案 1 :(得分:0)

我对浏览器中的Flash知之甚少(实际上是什么),但如果有办法用JavaScript检测Flash已加载:

  1. 让Flash更改JavaScript全局变量
  2. 让Flash为某些元素添加属性
  3. 然后,您可以创建一个检查此条件的JavaScript函数(例如,每1秒),并在验证检查后初始化应用程序。使用setInterval(function, time)创建此功能。确保在加载应用程序后清除间隔,以确保它不会再次加载。

相关问题