1

私は「読書リスト」があるプロジェクトに取り組んでいます。このリストには「読書リスト項目」があります-それらは抽象的な概念であり、サーバー側では書籍、記事などになる可能性があります-それらは処理されます全体を通して、違いを抽象化するデコレーターがあり、それは非常にうまく機能します。

私は多かれ少なかれ次のように見えるものに取り組んでいます:

  1. のコレクションReadingListItem(バックボーン モデル)
  2. #reading_list(バックボーン メタ ビュー)を表すビュー
  3. ビュー自体を表すビューでReadingListItemあり、このビューのバインディングはモデルと直接対話します。
window.ReadingListItem = Backbone.Model.extend
   url: ->
     @get('_links').self
   markRead: ->
     $.ajax
       method: 'put'
       url: @get('_links').read_list

   markDismissed: ->
     $.ajax
       method: 'delete'
       url: @get('_links').mark_dismissed

これはモデルで、ビューは次のようになります。

window.ReadingListView = Backbone.view.extend

   el: '#reading_list'

   render: ->
     @el.empty()
     @collection.each (list_item) ->
       @el.append( new ReadingListItemView(list_item).render().el() )

window.ReadingListItemView = Backbone.View.extend

  events: {
    "click .js-mark-read" : "markRead"
    "click .js-mark-dismissed" ; "markDismissed"
  }

  markRead: ->
    @model.markRead()
    $el.fadeOut
    @resetCollection

  markDismissed: ->
    @model.markDismissed()
    $el.fadeOut
    @resetCollection

  resetCollection: ->
    // to trigger a redraw, I really do this:
    window.reading_list_collection.reset()

これは機能します(実際に実行せずにSO用にこのコードを書いたので、少し間違っているかもしれませんが、概念的には私が今持っているものです)

これに関する私の質問は次のとおりです。

  1. モデルで CRUD ではない動詞を定義することは、バックボーンの「通常の使用法」に違反しているように思えます。これを処理する方法 (モデルを破壊しない方法でモデルに作用する) に関する情報を見つけることができなかったのは幸運でした。 )

  2. コレクションは、モデルに「何か」が発生したかどうか (その何かが作成/削除されていない場合) をどのように認識しますか?

  3. このリストをモデル化するより良い方法はありますか?

  4. ウォッチリストが空すぎる場合、サーバーから更新する必要があり、JSON で約 20 個のアイテムが事前にシードされており、実際には最初の 10 個しか表示されません。ページをシードするためのパフォーマンスの向上はあまりありません)

  5. markReadページの/markDismised別のビューで、サーバーからリストを再ダウンロードし、図書リストの概要カウンターを表示するように指示されているという別のことが起こります。これが同じコレクションにバインドされている場合は、に電力を供給しますReadingListView

不明な点がある場合は、お気軽にコメントしてください。具体的なエラー メッセージがない自由回答形式の質問には SO が適していないことは承知していますが、

4

0 に答える 0