Javascript 和兼容的单态主干
大家好,有人能给我举一个requirejs单例和下划线的once()可以理解的例子吗 我有以下几点:Javascript 和兼容的单态主干,javascript,global-variables,requirejs,amd,Javascript,Global Variables,Requirejs,Amd,大家好,有人能给我举一个requirejs单例和下划线的once()可以理解的例子吗 我有以下几点: define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) { var SingletonModel = Backbone.Model.extend({ urlRoot: "/model", idAttribute: "_id" }); return fun
define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {
var SingletonModel = Backbone.Model.extend({
urlRoot: "/model",
idAttribute: "_id"
});
return function() {
once(SingeletonModel);
};
});
正如你所看到的,返回语句完全是废话。我只是不知道如何使用主干。模型…我正在这样做
define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {
var SingletonModel = Backbone.Model.extend({
urlRoot: "/model",
idAttribute: "_id"
});
if (SingletonModel.prototype._instance){
return SingletonModel.prototype._instance;
}
SingletonModel.prototype._instance = new SingletonModel;
return SingletonModel.prototype._instance;
});
然后您只需要这个文件,并使用它,因为它将是一个实例
编辑:
我还没有尝试过,但是once()的用法应该在您的情况下使用
underscore.once()
如果您想要与AMD兼容的singleton,您可以使用以下选项:
define(
[...],
function() {
var MyModel = Backbone.Model.extend({
//...
});
return new MyModel();
}
);
由于require.js的工作方式,您应该只获得MyModel的一个实例
据我所知,\ once(someFunction)
生成一个只能调用一次的函数,因为它的返回值是存储的,因此每次在第一次调用函数后,它的原始返回值都会被返回
但是,对于singleton的情况,您使用的\uOnce(MyModel)
返回一个构造函数,它总是返回相同的对象(据我所知)。我们可以测试它:
正如你在小提琴中看到的,如果你返回这个代码>在构造器的末尾,就可以了。尝试删除并返回此文件然后使用控制台输出检查第二个实例,您将看到它没有第一个实例的属性