0

次のように、Coffeescript で記述されたバックボーンに baseCollection と baseModel があります。

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

目標は、すべてのモデルとコレクションをキャッシュしているユニバーサル コレクション ストアからコレクション/モデルをフィルター処理することです。この記事で説明したモデル ストアを再作成したい

4

1 に答える 1

0

私が完全にフォローしているかどうかはわかりませんが、ビュー全体で動物とサルのコレクションのシングルトンインスタンスにアクセスする方法を作成しようとしていると思いますか?

これが事実である場合、これが私の最初のコーヒースクリプトです - あなたが探しているように聞こえるパターンとまったく同じではありませんが、コーヒー/ジャバスクリプトのオプションです

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

私自身はおそらくこの後者のアプローチを採用しないでしょうが、うまくいくはずです。

于 2013-01-02T05:21:34.770 に答える