2

IE8 で次のエラーが返されます。

Message: Object expected Line: 27 Char: 1 Code: 0 URI: http://cdn.example.com/images/example4/js/libs/jquery.backgroundSize.js

Message: '$.fn' is null or not an object Line: 8 Char: 1 Code: 0 URI: http://cdn.example.com/images/example4/js/libs/jquery.waitUntilExists.js

Message: 'fn' is null or not an object Line: 62 Char: 73 Code: 0 URI: http://cdn.example.com/images/example4/js/libs/jquery.nicescroll.js

Message: Object expected Line: 34 Char: 231 Code: 0 URI: http://cdn.example.com/images/example4/js/libs/backbone.js

Message: 'Vent' is null or not an object Line: 19 Char: 3 Code: 0 URI: http://cdn.example.com/images/example4/js/models/auth.js

私たちのサイトは、依存関係管理のために Backbone.js と Require.js で構築された SPA です。この問題は、IE8 (および場合によってはそれ以前のバージョン) でのみ発生します。これらの各ファイルは、'Vent' が Backbone.Event を拡張するために発生する最後のものを除いて、すべて Require.js 構成ファイルで Backbone.js のシムとして作成されます。

Require.js 構成:

requirejs.config({
    baseUrl: 'http://cdn.staging.example.com/images/example4/js',
    paths: {
        underscore: './libs/underscore',
        jquery: './libs/jquery',
        backbone: './libs/backbone',
        example: './libs/example',
        blockui: './libs/jquery.blockUI',
        backgroundsize: './libs/jquery.backgroundSize',
        nicescroll: './libs/jquery.nicescroll',
        waituntilexists: './libs/jquery.waitUntilExists',
        swfobject: './libs/swfobject',
        spinner: './libs/jquery.spinner'
    },
    //Create shims for Backbone
    shim: {
        'backgroundsize': {
            deps: [ 'jquery'],
            exports: 'backgroundsize'
        },
        'nicescroll': {
            deps: ['jquery'],
            exports: 'nicescroll'
        },
        'waituntilexists': {
            deps: ['jquery'],
            exports: 'waituntilexists'
        },
        'spinner': {
            deps: ['jquery'],
            exports: 'spinner'
        },
        'backbone': {
            deps: [ 'underscore', 'jquery','blockui','backgroundsize','nicescroll', 'waituntilexists', 'swfobject', 'spinner'],
            exports: 'Backbone'
        }
    }
});

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

これを引き起こしている可能性のある提案は、Backbone.js 0.9.2 と Require.js 2.0.6 を使用しています。

4

2 に答える 2

0

ここで読むことができるように、IEにはシムに関するいくつかの問題がありますhttp://requirejs.org/docs/errors.html#nodefine

私がhttp://requirejs.org/docs/api.html#config-shimから理解している限り

他の「shim」モジュールは、シムスクリプトの依存関係としてのみ使用するか、依存関係のないAMDライブラリを使用し、グローバル(jQueryやlodashなど)を作成した後にdefine()を呼び出します。そうしないと、AMDモジュールをshim configモジュールの依存関係として使用する場合、ビルド後、ビルド内のシムコードが実行されるまでそのAMDモジュールが評価されず、エラーが発生します。最終的な修正は、すべてのシムコードをアップグレードして、オプションのAMD define()呼び出しを使用することです。

シムの依存関係としてjqueryを使用するか、jqueryがロードされなかったため、グローバルに設定できなかったため、問題が発生する可能性があります。

于 2013-02-15T08:46:01.683 に答える
0

次のように、メインの require にバックボーンを追加してみてください。

    requirejs(['app', 'backbone'], function(App){ App.initialize(); });

また、r.js を使用して 1 つの連結ファイルを生成してみてください (必ず最適化をオフにしてください)。require がスクリプトをロードする順序を確認できます。

于 2013-02-19T11:37:11.207 に答える