覆盖多个脊椎模型中的提取

时间:2012-11-20 16:56:41

标签: coffeescript spine.js

我需要在所有Spine模型中覆盖Spine的@fetch()方法。目前我的代码重复如下:

TastypieEndpointMixin =
    fromJSON: (data) ->
        return unless data
        return Spine.Model.fromJSON(data.objects)

class App.models.Position extends Spine.Model
    @configure 'Position', 'code', 'name'
    @extend Spine.Model.Ajax
    @extend TastypieEndpointMixin
    @url: '/api/v1/position/?format=json'

    validate: ->
        'code is required' unless @code

    @fetch: ->
        defer = $.Deferred()
        @one "refresh", ->
            defer.resolve()
        super
        return defer


class App.models.Player extends Spine.Model
    @configure 'Player', 'first_name', 'last_name', ...
    @extend Spine.Model.Ajax
    @extend TastypieEndpointMixin
    @url: '/api/v1/player/?format=json'

    @fetch: ->
        defer = $.Deferred()
        @one "refresh", ->
            defer.resolve()
        super
        return defer

我的问题是:如何创建包含@fetch()的某种形式的父类?

我知道这应该是一个简单的问题需要解决。我尝试了很多选项(包括扩展Spine.ModelSpine.Model.Ajax),但没有任何效果,我似乎无法理解它。

1 个答案:

答案 0 :(得分:0)

这就是我解决完全相同问题的方法:

class BasicModel extends Spine.Model

  @fetch: ->
    defer = $.Deferred()
    @one "refresh", ->
      defer.resolve()        
    super
    defer

class App.models.Player extends BasicModel

  #This class now has the fetch() function from the BasisModel

当然,您可以在BasicModel中添加许多有用的功能,这些功能将在所有其他型号中提供。