0

尝试将 require js 应用于我的代码时,我得到一个主干是未定义的错误。我读过网站上的其他文章说要使用 shim,但并没有解决问题。

助手/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"]);

主.js:

require(["helper/util"], function(App) {
    //Models
     TestProvider = Backbone.Model.extend({
        defaults: {
            ID: '',
            Name: '',
        },
        initialize: function() {
            this.ID= '';
            this.Name= '';
        }
    });
});
4

2 回答 2

2

我有根据的猜测是你从来没有真正的requireBackbone。

尝试像这样要求它:

require(["helper/util", "Backbone"], function(App) {
    //Models
     TestProvider = Backbone.Model.extend({
        defaults: {
            ID: '',
            Name: '',
        },
        initialize: function() {
            this.ID= '';
            this.Name= '';
        }
    });
});

当 Backbone 是模块要求的一部分但实际上不是 AMD 模块时,Shim 配置告诉加载程序该怎么做。

于 2013-04-12T15:35:38.050 回答
2

总而言之,您的文件没有多大意义。在这里,您正在定义一个类,因此您应该使用该define函数。

define(["helper/util"], function(App) {

你没有使用Appvar,所以让我们删除它:

define([], function() {

现在,我们想要包含 Backbone(参见 Nirazul 对shim解释的回答)以确保它已加载。此外,Backbone 将是一个全局变量,因此您不需要在参数列表中声明它:

define(['backbone'], function() {

现在,您必须返回新课程:

return TestProvider = Backbone.Model.extend({

此外,对于您的 jQuery 插件,您还可以更改一些内容。首先,在中声明它们require.config(将 jQuery 指定为 shim 中的依赖项)。然后,将它们作为依赖项添加到需要它们的任何类中。这样,您就可以在实际需要它们时异步加载它们。

于 2013-04-12T15:44:34.837 回答