我正在做一个有“阅读列表”的项目,在这个列表中是“阅读列表项”——它们是一个抽象概念,在服务器端它们可以是书籍、文章等——它们被处理整个过程中都有一个装饰器,它可以抽象出差异,效果很好。
我正在做一些看起来或多或少像这样的东西:
- s集合
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 的动词似乎违反了主干“正常用法”,而且我没有幸运地找到有关如何处理这个问题的任何信息(以不破坏模型的方式作用于模型) )
集合如何知道模型是否发生了“某些事情”(当没有创建/删除某些事情时)?
有没有更好的方法可以为这个列表建模?
当监视列表太空时,它应该从服务器刷新自己,它预先播种了大约 20 个 JSON 项目,实际上只显示前 10 个。(我可能会将这一切都移动为 JSON,因为它不是'为页面播种并没有太大的性能胜利)
还有其他事情发生,在页面上的
markRead
/markDismised
另一个视图上被告知从服务器重新下载列表,以显示阅读列表的摘要计数器,我希望这是否绑定到同一个集合权力ReadingListView
如果有任何不清楚的地方,请随时发表评论,我知道在没有具体错误消息的情况下,SO 不适合开放式问题,但我很期待