0

これにより、コレクション内のすべてが出力されるはずですが、2 つの要素しか出力されません。

リスト全体を出力しないのはなぜですか? ある種のレースケースですか?

http://jsfiddle.net/Czenu/1/

class window.Restful
  constructor:->
    _.each @collection, (action,kind)=>
      $('.actions').append "<div>#{action} #{kind}</div>"

class Material extends Restful
  namespace:  'admin/api'
  table_name: 'materials'
  constructor:(@$rootScope,@$http)->
    super
  collection:
    get: 'downloaded'
    get: 'incomplete'
    get: 'submitted'
    get: 'marked'
    get: 'reviewed'
    get: 'corrected'
    get: 'completed'
    post: 'sort'
    post: 'sort_recieve'

new Material()
4

1 に答える 1

2

オブジェクトcollectionは、「get」と「post」という 2 つの異なるキーを持つ要素で構成されています。各キーは 1 つの値にしかマッピングできないため、オブジェクトは次のように縮小されます。

  collection:
    get: 'downloaded'
    ...
    get: 'corrected'
    get: 'completed'
    post: 'sort'
    post: 'sort_recieve'

解決策は、カスタム オブジェクトの配列など、より意味のあるオブジェクトを作成することです (以下の例のように、意味のある名前のショートカット関数を使用して作成されます)。

class window.Restful
  constructor: ->
    _.each @collection, (obj) =>
      {action,kind} = obj
      $('.actions').append "<div>#{action} #{kind}</div>"

class Material extends Restful
  get = (action) -> {action, kind:'get'}
  post = (action) -> {action, kind:'post'}
  ...

  collection: [
    get 'downloaded'
    get 'incomplete'
    get 'submitted'
    get 'marked'
    get 'reviewed'
    get 'corrected'
    get 'completed'
    post 'sort'
    post 'sort_recieve'
  ]

完全な結果はhttp://jsfiddle.net/Czenu/2/に表示されます。

于 2013-05-11T20:43:53.957 に答える