1

我有以下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()

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

我是否可以从 BaseModel 中访问类似的内容?


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

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

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

1 回答 1

3

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

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

于 2013-05-13T15:33:37.757 回答