3

Cakephp、backbone、requirejs で開発されたサイトがあります。

構成ファイルに JavaScript をマップしました。jquery をこのファイルに呼び出すと、すべて正常に動作します。jqueryを別のファイルに呼び出すと、jqueryがロードされていないように関数が定義されていないというエラーが表示されます。

これはconfig.jsで正常に動作する私のfoleです:

require.config({
    baseUrl: "/site.com/js/",

    paths: {
        // Aliases for libraries, so that we can change versions from here
        jquery: "libs/jquery/jquery-2.0.2.min",
        handlebars: "libs/backbone/template/handlebars",
        lodash: "libs/backbone/template/lodash.min",
        backbone: "libs/backbone/backbone-1.0.0.min",
        less:"libs/less/less-1.4.0-beta.min",
        helper:"app/helper",
        jquery_cookie:"libs/jquery/plugin/jquery.cookie",
        text:"libs/require/text-2.0.7"
    },

    shim: {
        "lodash": { exports: '_' },
        "handlebars": { exports: 'Handlebars' },
        "jquery": { exports: '$' },
        "backbone": {
            //These script dependencies should be loaded before loading
            //backbone.js
            deps: ["helper", "lodash", "jquery"],
            //Once loaded, use the global "Backbone" as the
            //module value.
            exports: "Backbone"
        },
        "jquery_cookie": {
            deps: ["jquery"]
            //,exports:"$"
        },
        "less": {
            exports:"less"
        }
    }

    // This is appended to every module loading request, for cache invalidation purposes
    // comment it on production
    , urlArgs: "bust=" + (new Date()).getTime()
});

require(["jquery"], function ($) {
    $("body").empty();
});

代わりに、これをconfig.jsに書き込むと

require.config({
    baseUrl: "/site.com/js/",

    paths: {
        // Aliases for libraries, so that we can change versions from here
        jquery: "libs/jquery/jquery-2.0.2.min",
        handlebars: "libs/backbone/template/handlebars",
        lodash: "libs/backbone/template/lodash.min",
        backbone: "libs/backbone/backbone-1.0.0.min",
        less:"libs/less/less-1.4.0-beta.min",
        helper:"app/helper",
        jquery_cookie:"libs/jquery/plugin/jquery.cookie",
        text:"libs/require/text-2.0.7"
    },

    shim: {
        "lodash": { exports: '_' },
        "handlebars": { exports: 'Handlebars' },
        "jquery": { exports: '$' },
        "backbone": {
            //These script dependencies should be loaded before loading
            //backbone.js
            deps: ["helper", "lodash", "jquery"],
            //Once loaded, use the global "Backbone" as the
            //module value.
            exports: "Backbone"
        },
        "jquery_cookie": {
            deps: ["jquery"]
            //,exports:"$"
        },
        "less": {
            exports:"less"
        }
    }

    // This is appended to every module loading request, for cache invalidation purposes
    // comment it on production
    , urlArgs: "bust=" + (new Date()).getTime()
});

そして、jquery への呼び出しを default.ctp に移動すると、jQuery が読み込まれないため、function undefined のエラーが表示されると思います。

デフォルト.ctp

require(["jquery"], function ($) {
    $("body").empty();
});

jquery を deafult.ctp に使用できないのはなぜですか? すべてのファイルにマップする必要がありますか? 私はそうは思わない、誰かが私を助けることができますか?ありがとう

4

1 に答える 1

0

jquery を使用しようとすると、config.js が実行されるようです。設定ファイルの実行時にログを確認してみてください。

于 2014-02-15T06:47:40.540 に答える