javascript - 和兼容的单例 Backbone.Model

标签 javascript global-variables requirejs amd

嗨,有人可以给我一个带有下划线的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/

相关文章:

javascript - 在 Dexie 中调用后已与 IndexedDB 数据库建立连接

javascript - 如何在 axios 中创建全局变量?

requirejs - 在页面之间重用 Require.js shim 配置

javascript - 在 Jquery 中将表单转换为关联数组

javascript - 服务器在某些路由上抛出 500 错误

javascript - 在 Shaka Player 中更改字幕的文本大小

python - 在线程中使用全局变量

c++ - 静态类数据成员的范围

javascript - 有没有一种方法可以加载模块化 HTML 片段而不必为每个片段触发 http 请求?

javascript - 未捕获的断言错误 : path must be a string error in Require. js