我有以下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
答案 0 :(得分:3)
如果我理解你想要实现的目标,你可以通过将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
。