0

我正在为一个使用 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").default 来尝试加载对象和相同的方法来尝试和使用函数但是它只是回来说他们不存在。我已经能够以相同的方式访问另一个模型中的功能,但对于大多数其他模型,它不起作用。

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

4

1 回答 1

0

该结构是异步模块加载工作所必需的。defineRequireJS 模块是在由;调用的函数中构造的。该函数应该是return模块的公共接口。在您的情况下,您需要以下内容:

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语句中使用,并且根本不是有效的变量名。

于 2013-08-24T01:47:44.080 回答