私は「読書リスト」があるプロジェクトに取り組んでいます。このリストには「読書リスト項目」があります-それらは抽象的な概念であり、サーバー側では書籍、記事などになる可能性があります-それらは処理されます全体を通して、違いを抽象化するデコレーターがあり、それは非常にうまく機能します。
私は多かれ少なかれ次のように見えるものに取り組んでいます:
- のコレクション
ReadingListItem
(バックボーン モデル) #reading_list
(バックボーン メタ ビュー)を表すビュー- ビュー自体を表すビューで
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用にこのコードを書いたので、少し間違っているかもしれませんが、概念的には私が今持っているものです)
これに関する私の質問は次のとおりです。
モデルで CRUD ではない動詞を定義することは、バックボーンの「通常の使用法」に違反しているように思えます。これを処理する方法 (モデルを破壊しない方法でモデルに作用する) に関する情報を見つけることができなかったのは幸運でした。 )
コレクションは、モデルに「何か」が発生したかどうか (その何かが作成/削除されていない場合) をどのように認識しますか?
このリストをモデル化するより良い方法はありますか?
ウォッチリストが空すぎる場合、サーバーから更新する必要があり、JSON で約 20 個のアイテムが事前にシードされており、実際には最初の 10 個しか表示されません。ページをシードするためのパフォーマンスの向上はあまりありません)
markRead
ページの/markDismised
別のビューで、サーバーからリストを再ダウンロードし、図書リストの概要カウンターを表示するように指示されているという別のことが起こります。これが同じコレクションにバインドされている場合は、に電力を供給しますReadingListView
不明な点がある場合は、お気軽にコメントしてください。具体的なエラー メッセージがない自由回答形式の質問には SO が適していないことは承知していますが、