我有一个" FormView"我的Marionette应用程序中的类,它为我的应用程序周围的表单提交设置了很多东西。我每次有表格时都会用它。我还希望通过templateHelpers
方法将一些帮助器传递给每个表单模板,但我也希望能够在子项中添加额外的templateHelpers
。像这样:
class Views.FormView extends Marionette.ItemView
templateHelpers: ->
helpers: Marionette.Concerns.Helpers
class Views.NewUser extends Views.FormView
templateHelpers: ->
variable: @something
我希望能够从@variable
的模板访问@helpers
和NewUser
。另外,如果_.extends
是一个对象,我知道如何处理这个问题(通过templateHelpers
),但我需要它作为一个函数。
有可能吗?如果是这样,怎么样?
答案 0 :(得分:4)
在Backbone中,当你从另一个类继承时,Backbone会给子类一个__super__
属性(两端都是双下划线),这是父类的原型。因此,从Views.NewUser
课程中,您可以通过View.NewUser.__super__
获取原型。然后,您可以在该对象上调用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()
答案 1 :(得分:1)
假设当你说" parent"你的意思是"父母的观点"而不是OO的祖先。 您想要实现的目标可以通过执行以下操作来完成: 1.使用itemViewOptions(或更新的Marionette中的childViewOptions)将数据对象从父视图传递到子视图。它可以包含功能。 2.在子视图中,您可以执行以下操作:
templateHelpers: ->
_.extend super(), @options.someOptionsFromParent