1

在清除我的缓存后的应用程序的初始加载中,我得到一个 jquery is undefined bc 应用程序试图在 jquery 加载之前加载 jquery validate。刷新后,一切都加载并正常工作。我以为我设置正确,但我错过了什么吗?使用backbone.js、require.js 和jquery。

主.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();
});

应用程序.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();
});

应用程序.js

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

 return { 
    initialize: initialize
  };
});
4

5 回答 5

1

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

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

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

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

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

于 2013-06-24T15:57:55.823 回答
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"
        }
    },
});
于 2013-06-23T23:59:24.647 回答
0

exports属性需要与全局属性名称匹配 - 对于 jQuery,它需要是$jQuery。对于骨干网,它需要是Backbone.

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

于 2013-06-24T02:13:29.837 回答
0

你从哪里得到错误?你可以粘贴堆栈跟踪吗?

还值得检查的是 jquery 的 url。在浏览器中输入您的 jquery url(以 'libs/jquery/jquery-min' 结尾),看看是否可以找到它。

于 2013-06-23T23:57:15.357 回答
-3

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

于 2013-06-24T20:06:20.867 回答