2011-09-12 13 views
0
class TheModel extends Backbone.Model 
    foo: 
     #bar 

Entity = new TheModel(#pass in attributes)初期化モデルを拡張できますか?

私は、エンティティを拡張したモデル属性/状態を維持することはできますか?

class User extends Entity 
    foo: 
     super 
     #more 

EDIT:クラスは、オブジェクト(よりむしろ機能)を拡張有する

class Entity extends Backbone.Model 
    initialize: (options) -> 
     @_events options 

     _events: (options) -> 
      entity.bind 'foo' 

class Entity1 extends Entity 
    _events: (options) -> 
     super options 
     entity.bind 'bar' 

class Entity2 extends Entity 
    _events: (options) -> 
     super options 
     entity.bind 'baz' 

#a new entity arrives, we don't know if he is type one or two yet so he is... 
entity = new Entity 

#now we find out he is type 2 
entity = new Entity2(entity.attributes) 

答えて

2

号意味をなさない。あなたはUserクラスをインスタンス化しようとした場合は、エラーを取得したい

TypeError: Cannot read property 'constructor' of undefined 

あなたはEntityfooメソッドをオーバーライドする場合は、super構文は動作しませんが、直接それを行う必要があります。代わりに、書く必要があります

entity.foo = -> 
    @constructor::foo.apply arguments # equivalent to super 
    # ... 
+0

私の編集は意味がありますか? – fancy

+0

はい。あなたのコードは動作しますが、 'entity'にバインドされたイベントリスナーを失うことを除けば、新しい' entity'は古い 'entity'が属するコレクションのどれにも属しません。 (私の答えのように) 'foo'関数を動的に結びつける方が良いでしょう。あるいは、if @type is 1 ...のような何かをするone-size-fits-all' foo'関数のためにポリモーフィズムを取り除く方が良いでしょう。 –

+0

私の最新の編集は理にかなっていますか? – fancy

関連する問題