0

@fetch()すべての Spine モデルで Spine のメソッドをオーバーライドする必要があります。現在、次のようにコードが重複しています。

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.Modelやを含むSpine.Model.Ajax) が、何も機能せず、理解できないようです。

4

1 に答える 1

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 には、多くの便利な関数を入れることができます。

于 2012-11-21T09:57:45.437 に答える