如何访问函数和对象requireJS模块

时间:2013-08-24 00:57:53

标签: javascript backbone.js requirejs

我正在研究使用requireJS的网站的脚本以及我以前从未见过的这种奇怪的语法。

define("app/models/UserModel", ["backbone", "lang/Lang"], function (e, t) {
    var n = e.Model.extend({
        defaults: {
            item: "",
            these: "",
            arent: "",
            important: "en",
            relationship: 0,
            _position: {
                c: 0,
                r: 0
            }
        },
        hasPermission: function (e) {
            return this.get("permission") >= e
        },
        getTotalPoints: function () {
            return this.get("somestuff")
        }
    });

我已经使用require([“app / models / UserModel”])来加载模块和require(“app / models / UserModel”)。默认尝试加载对象和相同的方法来尝试和使用功能,但它回来说它们不存在。我已经能够以相同的方式访问另一个模型中的函数,但是对于大多数其他模型,它不起作用。

除此之外,我想知道var n = e.Model.extend是否与它有关。我无法理解它的功能是什么。

1 个答案:

答案 0 :(得分:0)

异步模块加载需要该结构才能工作。 RequireJS模块在define调用的函数内构造;该函数应该是return the public interface of the module。在您的情况下,您需要以下内容:

define("app/models/UserModel", ["backbone", "lang/Lang"], function (backbone, lang) {
    var MyModel = backbone.Model.extend({
        defaults: {
            item: "",
            these: "",
            arent: "",
            important: "en",
            relationship: 0,
            _position: {
                c: 0,
                r: 0
            }
        },
        hasPermission: function (e) {
            return this.get("permission") >= e
        },
        getTotalPoints: function () {
            return this.get("somestuff")
        }
    });

    // return the created model object so that it is
    // accessible as require("app/models/UserModel").default_
    return {
        default_: MyModel
    }
});

(请注意,我不熟悉Backbone)。另外,我猜你正在使用的模块被缩小然后美化,因为变量名是1个字母长,而不是非常助记?另外,default是一个关键字,可以在switch语句中使用,并且根本不是有效的变量名。