Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干应用程序中的单个模型或集合以及如何访问它_Javascript_Backbone.js_Requirejs - Fatal编程技术网

Javascript 主干应用程序中的单个模型或集合以及如何访问它

Javascript 主干应用程序中的单个模型或集合以及如何访问它,javascript,backbone.js,requirejs,Javascript,Backbone.js,Requirejs,我正在查看Addy Osmani的Todos mvc站点上的项目。我正在寻找Todos系列,因为它不是一个标准的对象。Todos集合只实例化一次,并且在Todos.js文件中,因为我们不需要两个Todos集合。因此,Addy在todos.js文件中创建一个实例并返回它 我想知道这对于这样的“单例”对象是否是一个好的实践。例如,假设我有一个模型,我的对象只需要这个模型的一个实例,我是否应该在model.js文件中返回一个实例化模型(如果我使用的是RequireJS)?在这种情况下,如果不使用Req

我正在查看Addy Osmani的Todos mvc站点上的项目。我正在寻找Todos系列,因为它不是一个标准的对象。Todos集合只实例化一次,并且在Todos.js文件中,因为我们不需要两个Todos集合。因此,Addy在todos.js文件中创建一个实例并返回它

我想知道这对于这样的“单例”对象是否是一个好的实践。例如,假设我有一个模型,我的对象只需要这个模型的一个实例,我是否应该在model.js文件中返回一个实例化模型(如果我使用的是RequireJS)?在这种情况下,如果不使用RequireJS,我应该怎么做

另一个问题是如何访问模型实例。如果我在model.js文件中返回一个实例(使用RequireJS),我只需要将model.js放在依赖项列表中,就可以得到该实例。但是如果我没有使用RequireJS,或者如果我决定不在model.js中返回实例模型,该怎么办?在这种情况下,访问模型实例的良好实践是什么

var myApp = {
    controllers : {},
    models : {},
    routers : {},
    instances : {}

};
最简单的方法是:

myApp.models.Model = (function() {

    /* Model initiation etc can go here, just return the model in the end*/
    var Model = new Backbone.Model.extend({
        /* bla bla*/
    });

    return Model;

})();

myApp.instances.modelInstance = (function() {
    return new myApp.models.Model with app specific data;
})();
如果您打算继续使用requirejs(,您应该使用它,因为它非常棒

然后定义一个新文件(“modelInstance.js”)


如何从其他视图访问模型?有无RequireJS?关于您的更新,我试图了解在RequireJS中返回实例是否是一种好的做法?例如,您可能希望以后将此模型用于其他目的,然后您将无法使用代码。注意事项:我将举例说明如何从使用/不使用RequireJS的视图访问模型。我认为您的应用程序只需要具有特定数据的模型。如果要重用该模型,请声明它,然后声明使用该模型的新实例。我更新了我的答案以反映这些变化。
define(["deps1", "deps"], function(deps1, deps2) {

 var Model = new Backbone.Model.extend({
            /* bla bla*/
        });

        return Model;
});
define(["Model"], function(Model) {


    return new Model with app specific data;
});