扩展哈希属性并防止使用coffeescript和marionettejs覆盖它

时间:2013-08-14 10:19:07

标签: javascript backbone.js coffeescript marionette

我有这样的观点:

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添加到区域的哈希值,而不是覆盖它。所以区域将是region1和region2的哈希。

我怎样才能得到它?

1 个答案:

答案 0 :(得分: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