需要JS初学者 - 依赖注入



我是一个初学者,需要JS,我在这里有疑问。

我的文件的结构如下:

root
|____assets
|____bootstrap-3.0.1
|________dist
|____________js
|____________bootstrap.min.js
|________js
|________angulajs.min.js
|________app.js
|________jquery.min.js
|________underscorejs-min.js
|____________app
|________________main.js

我的app.js文件如下:

requirejs.config({
    "baseUrl": "assets/js",
    "paths": {
        ": "app",
        "jquery": "jquery.min",
        "jquery-migrate": "jquery-migrate.min",
        "twitter-bootstrap": "../bootstrap-3.1.0/dist/js/bootstrap.min",
        "underscore": "underscore-min"
    },
    "shim": {
        "twitter-bootstrap": {
            deps: [ "jquery" ]
        }
    }
});
requirejs(["app/main"]);

我的主js如下:

define([ "jquery", "twitter-bootstrap" ], function($) {
    $(function() {
        $("#teste").tooltip();
    });
});

我的问题是关于Bootstrap的主文件和依赖关系的问题。如果我声明了引导程序取决于jQuery,我仍然必须将" jQuery"包括在定义函数中?我试图删除" jQuery"声明,但没有注入依赖性,我收到了 undefined 错误。

感谢您的任何帮助!

这样做确实是要走的方法:

define([ "jquery", "twitter-bootstrap" ], function($) {
    $(function() {
        $("#teste").tooltip();
    });
});

在上面的代码中,很明显$应绑定到jquery模块。如果这样做:

define(["twitter-bootstrap" ], function($) {
    $(function() {
        $("#teste").tooltip();
    });
});

您将$绑定到twitter-bootstrap模块。没有进一步的配置,这将无法使用,因为twitter-bootstrap什么都没有导出。(它以jQuery插件的形式安装。)您可以通过这样的设置垫片来解决它:

"shim": {
     "twitter-bootstrap": {
         deps: [ "jquery" ],
         exports: '$.fn.tooltip',
         init: function ($) { return $; }
     }
 }

但是,我不建议这样做,因为有人在不知道上下文的情况下(即,不知道jquerytwitter-bootstrap模块之间的关系)不容易知道发生了什么。

exports字段上方的垫片中不是绝对必要的,但是它有助于需要何时加载自举。它应该是一个不存在的符号 prior 被加载的bootstrap,但在加载后存在

最新更新