当我尝试将require js应用于我的代码时,我得到一个主干是未定义的错误。我已经阅读了网站上的其他文章,说使用垫片并且它没有解决问题。
助手/ util.js中:
require.config({
waitSeconds: 10,
paths: {
"jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min",
"underscore": "http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.6/underscore-min",
"backbone": "http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min"
},
shim: {
jquery: {
exports: "$"
},
underscore: {
exports: '_'
},
backbone: {
deps: ["underscore","jquery"],
exports: "Backbone"
},
app: {
deps: ["backbone"],
exports: "App"
}
}
});
require(["Scripts/jquery.flip.min.js"]);
require(["Scripts/jquery-ui-1.10.2.custom.min.js"]);
require(["Scripts/RatingProviders.js"]);
main.js:
require(["helper/util"], function(App) {
//Models
TestProvider = Backbone.Model.extend({
defaults: {
ID: '',
Name: '',
},
initialize: function() {
this.ID= '';
this.Name= '';
}
});
});
答案 0 :(得分:2)
我受过良好教育的猜测是,你实际上从未require
Backbone。
尝试这样要求:
require(["helper/util", "Backbone"], function(App) {
//Models
TestProvider = Backbone.Model.extend({
defaults: {
ID: '',
Name: '',
},
initialize: function() {
this.ID= '';
this.Name= '';
}
});
});
当Backbone是模块要求的一部分但实际上并不是AMD模块时,Shim config告诉加载器该做什么。
答案 1 :(得分:2)
总而言之,您的文件没有多大意义。您在这里定义类,因此您应该使用define
函数。
define(["helper/util"], function(App) {
您没有使用App
var,所以我们将其删除:
define([], function() {
现在,我们想要包含Backbone(请参阅Nirazul的 shim 解释的答案)以确保它已加载。此外,Backbone将是一个全局变量,因此您不需要在参数列表中声明它:
define(['backbone'], function() {
现在,您必须返回新课程:
return TestProvider = Backbone.Model.extend({
此外,对于您的jQuery插件,您还可以更改一些内容。首先,在require.config
中声明它们(将jQuery指定为shim中的依赖项)。然后,将它们作为依赖项添加到需要它们的任何类中。这样,你实际需要时就异步加载它们。