2013-03-26 34 views
3

我在不同的文章中看到了关于如何从RequireJS定义中返回Backbone集合(或View,就此而言)的不同示例。例如:在requirejs中返回主干集合的标准方式

define(['models/person'], function(person) { 
    var personCollection = Backbone.Collection.extend({ 
     model: person, 
     url: "api/person" 

    }); 
    // do this? 
    return new personCollection(); 
    // or this? 
    //return personCollection; 
}); 

这两种方法都有内存优势吗?是否有标准的设计模式来决定应该使用哪种模式?

同样的问题也适用于视图,因为我已经看到它们都是以两种方式完成的。

+0

你怎么样计划使用它?你想要一个集合(即'定义'是用来定义一个单例)还是集合的定义? – rjz 2013-03-26 12:57:13

+0

也许这应该是我的下一个问题:-)是否建议共享集合的单一定义,例如如果集合由一个小部件获取,那么它不需要被另一个小部件获取。或者是否会造成重叠和冲突更新的很多可能性? – 2013-03-26 13:01:23

+0

我认为如果从相同的端点获取共享集合是一个好主意,这样可以避免多个请求,并且可以依靠收集事件来更新UI。 – 2013-03-26 13:05:50

回答

0

我会做第二种方式,因为那样你会收到对“蓝图”的引用而不是对象本身。在大多数情况下,人们应该想要初始化对象创建本身。

而且,即使你只想要创建我会用这样的工厂方法建议收集的单个实例:

define(['models/person'], function(person) { 
    var personCollection = Backbone.Collection.extend({...}), 
     singleCollection, 
     export = { 
      getInstance = function (options) { 
      if (!singleCollection) { 
       singleCollection = new personCollection(options); 
      } 
      return singleCollection; 
      } 
     } 

    return export; 
}); 

然后你可以这样调用它:

require('models/person', function (person) { 
    var personCollection = person.getInstance(options); 
}