需要js和骨干

时间:2013-04-12 15:28:58

标签: jquery backbone.js requirejs

当我尝试将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= '';
        }
    });
});

2 个答案:

答案 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中的依赖项)。然后,将它们作为依赖项添加到需要它们的任何类中。这样,你实际需要时就异步加载它们。