我有以下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
最佳答案
如果我了解您要实现的目标,则可以通过将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
,第二个警报应为您。