2012-12-30 58 views
0
每個擴展類

唯一ID我有一個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 

所有型號/藏品從這些基本單位延伸。是否有可能爲每個擴展這些基類的類創建一個uniqueID?如:

class Animals extends Collection --> given a uniqueID 
class Monkeys extends Animals --> given a uniqueID 

目標是過濾來自通用集合商店的集合/模型,該通用集合商店正在高速緩存我的所有模型和集合。我想重新創建示範店在本 article

+0

你的意思是像['cid'](http://backbonejs.org/#Model-cid),但是對於集合? –

+0

但是對於構造函數來說 - 不是實例 – imrane

回答

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') 

我自己可能不會採取後一種方法,但它應該工作。