0

私はこのようなビューを持っています:

class MyView1 extends Backbone.Marionette.Layout
  template: JST['templates/view1']

  regions:
     region1: '.region1'

  ## Here some methods....

そして今、いくつかの領域とメソッドを追加するためにこのクラスを拡張したい

class MyView2 extends MyView1
  template: JST['templates/view2']

  regions:
    region2: '.region2'

これにより、テンプレートとリージョンの属性が上書きされます。しかし、リージョンのハッシュに region2 を追加したいのですが、それを上書きするのではありません。したがって、リージョンは、リージョン 1 とリージョン 2 のハッシュになります。

どうすれば入手できますか?

4

1 に答える 1

1

回避策は次のとおりです。

class MyView1 extends Backbone.Marionette.Layout
  template: JST['templates/view1']

  regions:
    region1: '.region1'

class MyView2 extends MyView1
  template: JST['templates/view2']

  MyView2::regions = {}
  for k, v of MyView1::regions
    MyView2::regions[k] = v
  MyView2::regions.region2 = '.region2'

しかし、おそらく以下はよりクリーンであり、あなたの目的にも同様に役立つでしょう:

class MyView1 extends Backbone.Marionette.Layout
  constructor: ->
    @regions =
      region1: '.region1'

  template: JST['templates/view1']

class MyView2 extends MyView1
  constructor: ->
    super()
    @regions.region2 = '.region2'

  template: JST['templates/view2']

コメントで示唆されているように、::代わりにより慣用的なcoffeescriptを使用するように編集されました.prototype

于 2013-08-14T12:48:20.777 に答える