我正在研究使用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是否与它有关。我无法理解它的功能是什么。
答案 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
语句中使用,并且根本不是有效的变量名。