骨干视图设计

时间:2014-10-03 12:50:32

标签: backbone.js marionette

我试图像这样创建一个html页面

Publisher (Master) - Use CompositeView

Book List (Detail) - User ItemView

Video List (Detail) - ????? 1. What to use for this detail  ?????
  1. 我是应该立即获取所有数据还是分成3个请求?
  2. ABC Publisher
    
    Book1, Book2, Book3...
    
    Video1, Video2, Video3...
    

2 个答案:

答案 0 :(得分:1)

您的问题非常广泛,但我们要澄清一下。

1)关于观点的简短:

发布商 - CompositeView?如果要在此视图中呈现PublisherModel或PublisherCollection,这将是正确的方法。如果此视图只是子视图的换行,请使用LayoutView。

图书清单 - 看起来您要在这里渲染集合,因此您应该使用CollectionView或CompositeView而不是ItemView。如果您想渲染单个模型,则应使用ItemView。

2)常用方法对每个集合或模型使用单独的请求。在您的情况下,您应该发送视频请求,另一个用于书籍等。如果您希望在一个请求中获取所有数据,最好创建类似Controller的内容 - 它将负责解析此请求响应并将解析后的数据提供给特殊集合。

答案 1 :(得分:0)

这似乎是backbone-relational的一个很好的用例。在服务器端代码中,您可以定义json以包含嵌套元素。因此,每个发布者都会有一个书籍列表和一个在json中返回的视频列表。然后,backbone-relational将自动解析这些并为您创建集合/模型。所以你可以说publisher.get(' books')并且你得到你的书籍收藏。您还可以从图书清单中的图书中获取对您的出版商的参考,等等。我发现这是一个很好的方式,只需拨打一个电话并处理其中的所有其他部分。

因此,您的发布商型号代码将是这样的(注意 - 您的密钥应该与您的json实际匹配):

class Entities.Publisher extends Backbone.RelationalModel
    urlRoot: "publishers"

    relations: [
      {
      type: Backbone.HasMany
      key: "bookLists"
      relatedModel: Entities.BookList
      reverseRelation: 
        key: 'publisher'
        includeInJSON: 'id'
      },
      {
      type: Backbone.HasMany
      key: "videoLists"
      relatedModel: Entities.VideoList
      reverseRelation: 
        key: 'publisher'
        includeInJSON: 'id'
      }
    ]