【问题标题】:How to initialize your backbone app within require.js after external callback外部回调后如何在 require.js 中初始化骨干应用
【发布时间】:2012-01-05 12:04:54
【问题描述】:

通常您在页面加载期间使用 require.js 在 Backbone 应用程序中加载

<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 发起回调。此回调需要使用 require.js 中的依赖项触发 app.initialize()

第一种方法和第二种方法(等待 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 的另一个副本,或者从缓存/dom 中读取

【问题讨论】:

    标签: javascript backbone.js requirejs


    【解决方案1】:

    您可以利用 requirejs shim 配置,这将允许您为指定的 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();
    

    【讨论】:

    • 谢谢你的回答,虽然已经两年了 :) 我现在无法真正测试它是否有效。
    【解决方案2】:

    我对浏览器中的 Flash 了解不多(实际上一无所知),但如果有办法使用 JavaScript 检测 Flash 已加载:

    1. 让 Flash 更改为 JavaScript 全局变量
    2. 让 Flash 为某些元素添加属性

    然后您可以创建一个 JavaScript 函数来检查此条件(例如每 1 秒),并在检查通过后初始化应用程序。使用setInterval(function, time) 创建此函数。确保在加载应用后清除间隔,以确保它不会再次加载。

    【讨论】:

      猜你喜欢
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多