Javascript 和兼容的单态主干

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

大家好,有人能给我举一个requirejs单例和下划线的once()可以理解的例子吗

我有以下几点:

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)
返回一个构造函数,它总是返回相同的对象(据我所知)。我们可以测试它:

正如你在小提琴中看到的,如果你
返回这个在构造器的末尾,就可以了。尝试删除
并返回此文件