gpt4 book ai didi

javascript - 如何在 Coffeescript 继承中从父静态访问子模型

转载 作者:行者123 更新时间:2023-11-30 13:03:36 25 4
gpt4 key购买 nike

我有以下 BaseModel

namespace 'Models', (exports) ->
class exports.BaseModel
toJSON: =>
if @jsonProperties? then ko.toJSON( @, @jsonProperties() ) else null

然后是继承BaseModel类的Profile

namespace 'Models', (exports) ->
class exports.Profile extends exports.BaseModel
constructor: ( @options ) ->
@FirstName = ko.observable( @options.FirstName )
@LastName = ko.observable( @options.LastName )

@jsonProperties: ->
return [ "FirstName", "LastName" ]

这允许我调用如下内容

profile = new Models.Profile
FirstName: 'blah'
LastName: 'blah'

profile.toJSON()

但是在基础模型中 @jsonPropertiesundefined 因为它有点像类类型上的静态函数。我想要这个的原因是我可以在其他类中引用它,比如 Models.Profile.jsonProperties()

我有可能从 BaseModel 中访问类似的东西吗?


编辑:添加一个占位符修复,直到我想出更好的东西

我已完成以下操作以使其正常工作,但我不想在我创建的每个模型中都重复这一行,似乎应该有一种通用方法可以从 BaseModel 中执行此操作。

namespace 'Models', (exports) ->
class exports.Profile extends exports.BaseModel
constructor: ( @options ) ->
@jsonProperties = Models.Profile.jsonProperties

最佳答案

如果我理解您要实现的目标,您可以通过将 jsonProperties 定义为“静态”类方法和实例方法来修复它。这是一个简化的代码(无法访问 namespace util 和 knockout):

class BaseModel
toJSON: =>
if @jsonProperties?
for value in @jsonProperties()
@[value]
else
null

class Profile extends BaseModel
constructor: ( @options ) ->
@FirstName = @options.FirstName
@LastName = @options.LastName

@jsonProperties: ->
return [ "Class FirstName", "Class LastName" ]

jsonProperties: ->
return [ "FirstName", "LastName" ]

prof = new Profile
FirstName: 'Leandro'
LastName: 'Tallmaris'

alert(prof.toJSON());

alert(Profile.jsonProperties());

第一个警报应该给你 Leandro, Tallmaris,而第二个警报应该给你 Class FirstName, Class SecondName

关于javascript - 如何在 Coffeescript 继承中从父静态访问子模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16519526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com