脚本加载顺序错误 - require.js

时间:2013-06-23 23:02:20

标签: jquery backbone.js requirejs

在清除缓存后应用程序的初始加载我得到一个jquery未定义bc应用程序试图在加载jquery之前加载jquery validate。刷新后所有内容都加载并正常工作。我以为我正确设置了但是我错过了什么?使用backbone.js,require.js和jquery。

Main.js:

require.config({
  paths: {
    'jquery': 'libs/jquery/jquery-min',
    'underscore': 'libs/underscore/underscore-min',
    'backbone': 'libs/backbone/backbone-min',
    'validate': 'jquery.validate-1.11.1.min',
    'templates': '../templates'
  },

shim: {
    jquery: {
    exports: "jquery"
  },
    underscore: {
    exports: '_'
  },
  backbone: {
    deps: ['underscore', 'jquery'],
    exports: "backbone"
  },
    validate: {
    deps: ['jquery'],
    exports: "validate"
  }
},

});

require([
  'app'

], function(App){
  App.initialize();
});

App.js

define([
  'jquery', 
  'underscore', 
  'backbone',
  'validate',
  'router',
  'scripts'
], function($, _, Backbone, validate, Router, scripts){
var initialize = function(){
  Router.initialize();
};

return { 
  initialize: initialize
};
});

以下是我更新文件的内容,但仍然没有运气:

require.config({
  paths: {
'jquery': 'libs/jquery/jquery-min',
'underscore': 'libs/underscore/underscore-min',
'backbone': 'libs/backbone/backbone-min',
    'validate': 'jquery.validate-1.11.1.min',
'templates': '../templates'
  },

shim: {
    underscore: {
    exports: '_'
  },
  backbone: {
    deps: ['underscore', 'jquery'],
    exports: "Backbone"
  },
    validate: {
    deps: ['jquery', 'backbone'],
    exports: "validate"
  }
}

});

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

App.js

    define([
  'jquery', 
  'underscore', 
  'backbone',
     'validate',
    'router',
    'scripts'
], function($, _, Backbone, validate, Router, scripts){
  var initialize = function(){
Router.initialize();
  };

 return { 
    initialize: initialize
  };
});

5 个答案:

答案 0 :(得分:1)

从这里看到的jquery验证是一个由$ .validate()调用的插件。

在这种情况下,您不需要进行任何导出。

您可以尝试看看这对您是否有帮助:

   shim: {
        validate: {
            deps: ['jquery']
        }
    }

您还可以查看类似的stackoverflow问题以供参考:How to make a jQuery plugin loadable with requirejs

答案 1 :(得分:0)

你在哪里得到了恐怖?你可以粘贴一个堆栈跟踪吗?

另外值得一试的是jquery的url。在浏览器中输入您的jquery网址(以“libs / jquery / jquery-min”结尾),看看是否可以找到它。

答案 2 :(得分:0)

exports必须具有第三方脚本所期望的相同类型的情况。在这种情况下:jQueryBackbone

require.config({
    paths: {
        'jquery': 'libs/jquery/jquery-min',
        'underscore': 'libs/underscore/underscore-min',
        'backbone': 'libs/backbone/backbone-min',
        'validate': 'jquery.validate-1.11.1.min',
        'templates': '../templates'
    },
    shim: {
        jquery: {
            exports: "jQuery"
        },
            underscore: {
            exports: '_'
        },
        backbone: {
            deps: ['underscore', 'jquery'],
            exports: "Backbone"
        },
        validate: {
            deps: ['jquery'],
            exports: "validate"
        }
    },
});

答案 3 :(得分:0)

exports属性需要匹配全局属性名称 - 对于jQuery,它必须是$jQuery。对于主干,它必须是Backbone

你也不需要填充jQuery - 它已经通过命名定义与AMD兼容了很长一段时间。见https://github.com/jquery/jquery/blob/master/src/exports.js#L15-L17

答案 4 :(得分:-3)

感谢您的回复,我相信您的反馈修复了我本来会遇到的其他一些问题。看起来我正在使用一个非常旧版本的require.js 0.27.0并升级到最新修复的jquery问题。

相关问题