从木偶中的父级扩展 Coffeescript 子类函数
Posted
技术标签:
【中文标题】从木偶中的父级扩展 Coffeescript 子类函数【英文标题】:Extend Coffeescript subclass function from parent in marionette 【发布时间】:2015-09-06 04:08:59 【问题描述】:我的 Marionette 应用程序中有一个“FormView”类,它为我的应用程序周围的表单提交设置了很多东西。每次有表格时我都会使用它。我还有一些助手,我想通过templateHelpers
方法将它们传递到每个表单模板中,但我还希望能够在子级中添加额外的templateHelpers
。像这样:
class Views.FormView extends Marionette.ItemView
templateHelpers: ->
helpers: Marionette.Concerns.Helpers
class Views.NewUser extends Views.FormView
templateHelpers: ->
variable: @something
我希望能够从NewUser
的模板访问@variable
和@helpers
。此外,如果templateHelpers
是一个对象,我知道如何处理这个问题(通过_.extends
),但我需要它是一个函数。
有可能吗?如果有,怎么做?
【问题讨论】:
【参考方案1】:假设当您说“父”时,您的意思是“父视图”而不是 OO 祖先。 您想要实现的目标可以通过执行以下操作来完成: 1. 使用 itemViewOptions(或较新 Marionette 中的 childViewOptions)将数据对象从父视图传递到子视图。它可以包含函数。 2. 在您的子视图中,您可以执行以下操作:
templateHelpers: ->
_.extend super(), @options.someOptionsFromParent
【讨论】:
【参考方案2】:在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()
【讨论】:
这很有趣,但如果我能够以某种方式从 PARENT 类扩展它,我仍然更喜欢它。只是因为我知道当我创建一个新实例时我会忘记从子类扩展它。 据我所知,您不能从父类内部扩展子类(以任何语言)。此外,initialize
方法将在您创建子类的新实例时自动调用,因此如果您在该方法中执行_.extend
,则不必记住这样做。您可以立即使用@helpers
(或您所称的任何名称)属性。以上是关于从木偶中的父级扩展 Coffeescript 子类函数的主要内容,如果未能解决你的问题,请参考以下文章
如何从 TypeScript 文件中的父级获取子组件变量和函数
(QNativeSocketEngine)QObject:无法为不同线程中的父级创建子级