首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确使用domReady requireJS插件

如何正确使用domReady requireJS插件
EN

Stack Overflow用户
提问于 2012-02-20 13:13:57
回答 3查看 13.7K关注 0票数 4

以下是我在使用main.js之前的domReady:

代码语言:javascript
运行
复制
require.config({
  paths : {
      loader : 'libs/backbone/loader',
      jQuery : 'libs/jquery/jquery-module',
      Underscore : 'libs/underscore/underscore-module',
      Backbone : 'libs/backbone/backbone-module',
      templates : '../Templates'
  }
});

require([ 'app' ], function(app) {
  app.initialize();
});

和app.js:

代码语言:javascript
运行
复制
define([ 'jQuery', 'Underscore', 'Backbone', 'router',
    'services/Initializers/MainFrameInitializer',
    'services/Initializers/FlowsViewsInitializer',
    'services/Initializers/EditModuleInitializer',
    'services/Sandboxes/ModulesNavigationSandbox',
    'services/Sandboxes/ApplicationStateSandbox', 'DataModel/Constants' ],
    function($, _, Backbone, Router, MainFrameInitializer,
        FlowsViewsInitializer, EditModuleInitializer, ModulesNavigationSandbox,
        ApplicationStateSandbox, Constants) {
      var initialize = function() {
        // Pass in our Router module and call it's initialize function
        MainFrameInitializer.initialize();
        FlowsViewsInitializer.initialize();
        EditModuleInitializer.initialize();
        ApplicationStateSandbox.startCheckStatus();
        ModulesNavigationSandbox.navigate(Constants.Modules.Home);
        // Router.initialize();
      };

      return {
        initialize : initialize
      };
    });

所有的工作都很好,直到我优化项目。我已经知道,脚本在DOM准备好之前就开始运行了,这在优化之前是不正确的。无论如何,我希望使用domReady插件来确保首先加载DOM。

但是,显然,我不知道如何正确地做这件事。下面是main.js的新版本:

代码语言:javascript
运行
复制
require.config({
  paths : {
      loader : 'libs/backbone/loader',
      jQuery : 'libs/jquery/jquery-module',
      Underscore : 'libs/underscore/underscore-module',
      Backbone : 'libs/backbone/backbone-module',
      templates : '../Templates'
  }
});

require([ 'domReady', 'app' ], function(domReady, app) {
  domReady(app.initialize);
});

非常整洁和非常错误,因为在DOM准备好之前,appdomReady并行加载。

我该怎么解决呢?

谢谢。

编辑

我想我已经理解了我们的问题。app依赖项的构造函数不应运行任何依赖于DOM的代码。它们应该只返回函数,捕获依赖于DOM的逻辑。这个逻辑应该从app.initialize中执行,它保证在DOM准备就绪时运行。

EN

回答 3

Stack Overflow用户

发布于 2012-02-20 21:30:34

也许我错过了什么,但你会不会因为这样做而让你的生活更轻松一些呢?

代码语言:javascript
运行
复制
require(['jQuery', 'app' ], function(jQuery, app) {
  jQuery(function ($) {
    app.initialize();
  });
});

在你的main.js

票数 7
EN

Stack Overflow用户

发布于 2013-05-10 23:22:48

通过在domReady回调函数中要求应用程序,您应该能够同时要求domReady模块,然后是app模块。

代码语言:javascript
运行
复制
define(['require', 'domReady'], function(require, domReady) {
  domReady(function() {
    require(['app'], function(app) {
      app.initialize();
    });
  });
});
票数 7
EN

Stack Overflow用户

发布于 2012-08-31 09:15:31

如果您遵循文档at:http://requirejs.org/docs/jquery.html中的文档,您将被邀请在文档的开头嵌入一个require库:

代码语言:javascript
运行
复制
<script data-main="main" src="libs/require-jquery.js"></script>

但是,如果您查看在github上提供的示例的源代码,您将看到‘request-jquery.js’是通过简单地连接require文件和jquery文件生成的:

代码语言:javascript
运行
复制
 cat require.js jquery.js > ../jquery-require-sample/webapp/scripts/require-jquery.js

这意味着您可以将嵌入在head部分中的脚本替换为文档中任何位置的脚本(例如,在文档的最底部)。

代码语言:javascript
运行
复制
  <script src="libs/require.js"></script>
  <script src="libs/jquery-1.8.0.js"></script>
  <script>require(["main"]);</script>

因为jquery将自己定义为具有以下内容的模块:

代码语言:javascript
运行
复制
  define( "jquery", [], function () { return jQuery; } );

此后,您可以在任何脚本中使用jquery作为需求引用。例如:

代码语言:javascript
运行
复制
  require(["jquery"], function($) { }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9361737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档