我在Backbone中有一个baseCollection和baseModel,用Coffeescript编写,如下所示:
class Collection extends Backbone.Collection
constructor: (attrs = {}, options = {}) ->
return attrs if attrs instanceof Collection
return self if self = constructorCheck attrs, options
super attrs
constructorCreate @, attrs, options
所有型号/系列均来自这些基本单位。是否可以为每个扩展这些基类的类创建唯一ID?像:
class Animals extends Collection --> given a uniqueID
class Monkeys extends Animals --> given a uniqueID
目标是从一个缓存我所有模型和集合的Universal Collection Store中过滤集合/模型。我想重新创建模型存储,如下所述 article
答案 0 :(得分:0)
我不确定我是否会遵循,但我猜你是想创建一种方法来跨视图访问动物和猴子集合的单例实例?
如果是这种情况,这是我第一次使用coffeescript - 它听起来不像你正在寻找的相同模式,但在咖啡/ javascript中有一个选项
class Registry
find: (t) ->
lookup = @lookup ||= {}
lookup[t] ||= new t
class People extends Backbone.Collection
class Things extends Backbone.Collection
r = new Registry
p = r.find(People)
p2 = r.find(People)
t = r.find(Things)
t2 = r.find(Things)
if p != p2 || t != t2 || p == t
alert('failure')
else
alert('pass')
然而,回答你的问题更接近我的第一次阅读 - 这里是你如何为每个扩展类生成一个唯一的id。我并不完全确定这是你真正想要的,因为每个集合都是它自己的实例/不会跨视图同步(但是,相同'类型'的所有集合将具有相同的'myId')。
index = 0
lookup = {}
class MyCollection extends Backbone.Collection
constructor: ->
f = arguments.callee.caller
if(lookup[f]?)
@myId = lookup[f]
else
lookup[f] = index
@myId = index
index += 1
class People extends MyCollection
class Things extends MyCollection
p = new People()
p2 = new People()
t = new Things()
t2 = new Things()
if p.myId != p2.myId || t.myId != t2.myId || p.myId == t.myId
alert('failure')
else
alert('pass')
我自己可能不会采用后一种方法,但它应该有效。