嗨,有人可以给我一个带有下划线的once()的requirejs单例的易于理解的示例吗?
到目前为止我有这个:
define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {
var SingletonModel = Backbone.Model.extend({
urlRoot: "/model",
idAttribute: "_id"
});
return function() {
once(SingeletonModel);
};
});
正如你所看到的,特别是 return 语句完全是垃圾。我只是不知道如何单例 Backbone.Model...
最佳答案
如果您想要 AMD 兼容的单例,您可以使用以下内容:
define(
[...],
function() {
var MyModel = Backbone.Model.extend({
//...
});
return new MyModel();
}
);
由于 require.js 的工作方式,您应该只获取一个 MyModel 实例。
据我了解, _.once(someFunction)
生成一个只能调用一次的函数,因为它的返回值被存储,所以每次在第一次调用该函数时,将返回其原始返回值。
但是,对于单例情况,您使用 _.once(MyModel)
返回一个构造函数,该构造函数始终返回相同的对象(据我所知)。我们可以测试一下:http://jsfiddle.net/gfarrell/Z3CNc/
正如您在 fiddle 中看到的,如果您在构造函数末尾return this;
那就没问题了。尝试删除 return this;
然后使用控制台输出检查第二个实例,您会发现它没有第一个实例的属性。
关于javascript - 和兼容的单例 Backbone.Model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12028600/