我在木偶应用程序中有一个“FormView”类,该类为应用程序周围的表单提交设置了很多东西。每当有表格时,我都会使用它。我也有一些助手,我想通过templateHelpers方法传递到每个表单模板中,但是我也希望能够在子代中添加其他templateHelpers。像这样:

class Views.FormView extends Marionette.ItemView
  templateHelpers: ->
    helpers: Marionette.Concerns.Helpers

class Views.NewUser extends Views.FormView
  templateHelpers: ->
    variable: @something

我希望能够从@variable的模板访问@helpersNewUser。另外,如果_.extends是一个对象,我知道如何处理(通过templateHelpers),但是我需要将它作为一个函数。

可能吗?如果是这样,怎么办?

最佳答案

在Backbone中,当您从另一个类继承时,Backbone将为子类提供__super__属性(两端都加双下划线),该属性是父类的原型(prototype)。因此,从Views.NewUser类中,您可以通过View.NewUser.__super__获得原型(prototype)。然后,您可以在该对象上调用templateHelpers。这是我的操作方式(live example at JSbin):

Views = {}

class Views.FormView extends Marionette.ItemView
  templateHelpers: ->
    helpers: "Parent Value"
  logHelpers: ->
    console.log @templateHelpers()

class Views.NewUser extends Views.FormView
  templateHelpers: ->
    variable: "Child Value"
  logHelpers: ->
    console.log @templateHelpers()
    console.log Views.NewUser.__super__.templateHelpers()


formView = new Views.FormView()

formView.logHelpers() // { helpers: "Parent Value" }

newUser = new Views.NewUser()

newUser.logHelpers()

// { variable: "Child Value" }, { helpers: "Parent Value" }

然后,您可以使用_.extend彼此扩展。也许像这样:
initialize: ->
    @helpers = _.extend @templateHelpers(),
        Views.NewUser.__super__.templateHelpers()

关于javascript - 从 Marionette 中的父级扩展Coffeescript子类函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30950614/

10-12 12:47