1

我正在做一个有“阅读列表”的项目,在这个列表中是“阅读列表项”——它们是一个抽象概念,在服务器端它们可以是书籍、文章等——它们被处理整个过程中都有一个装饰器,它可以抽象出差异,效果很好。

我正在做一些看起来或多或少像这样的东西:

  1. s集合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. 当监视列表太空时,它应该从服务器刷新自己,它预先播种了大约 20 个 JSON 项目,实际上只显示前 10 个。(我可能会将这一切都移动为 JSON,因为它不是'为页面播种并没有太大的性能胜利)

  5. 还有其他事情发生,在页面上的markRead/markDismised另一个视图上被告知从服务器重新下载列表,以显示阅读列表的摘要计数器,我希望这是否绑定到同一个集合权力ReadingListView

如果有任何不清楚的地方,请随时发表评论,我知道在没有具体错误消息的情况下,SO 不适合开放式问题,但我很期待

4

0 回答 0