我有以下BaseModel

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


然后,我的Profile类继承了BaseModel

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定义为“静态” Class方法和实例方法来进行修复。这是一个简化的代码(无权访问namespace util和淘汰赛):

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,第二个警报应为您。

10-07 22:46