3

我刚刚开始使用 Backbone,并且对某一点感到困惑。

我有一个显示文档列表的页面。

单击列表中的文档可打开完整文档以进行编辑。

据我了解,在 Backbone 中对该列表建模的正确方法是作为文档模型的集合。

var DocList = Backbone.Collection.extend({
  model: document
});

然而,文档模型将很大,具有许多属性。该列表不需要显示所有这些信息。

我想知道是否最好有类似以下的东西......

var ShortDoc = Backbone.Model.extend({});
var shortDoc = new Doc({ 
  id: id,
  title: docTitle 
});
var DocList = Backbone.Collection.extend({
  model: shortDoc
});

...其中 shortDoc 仅包含生成列表所需的属性。

还是最好将 Collection 与整个文档模型一起使用?

在此先感谢您的帮助

4

2 回答 2

4

请记住,您可以Backbone.View为同一个模型编写多个 s。虽然您可能有一个DetailView展示整个文档的文件,但您也可以自由地创建一个ItemView展示每个文件的重要部分的列表视图。虽然您的DetailView遗嘱包括厨房水槽,但ItemView可能仅限于炫耀标题:

var MyItemView = Backbone.View.extend({
  tagName: 'li',
  render: function () {
    this.$el.html('<h3>' + this.model.get('title') + '</h3>');
    return this;
  }
});

最后,如果您关心的是数据量:许多 Backbone 应用程序选择为应用程序中使用的每种模型保留一个集合。他们的状态需要在某个地方保持;为什么不在一个漂亮、有条理的列表中呢?当应用程序加载时,您不需要引导每个模型属性。您可能会选择加载标题(或任何您需要呈现初始列表的内容),并推迟获取模型,直到用户请求任何详细信息。

于 2012-12-02T21:46:34.660 回答
0

您的问题标题中有 3 个不同的概念(类、实例和数据表示)。

你的定义应该是这样的:

var Doc = Backbone.Model.extend({});
var DocList = Backbone.Collection.extend({
    url: '/docs',
    model: Doc
});

如果您没有默认值,则在此执行阶段没有数据。然后,您开始使用可以拥有完整数据集(或仅部分数据)的模型填充您的集合,或者通过在客户端创建它们:

var myDocList = new DocList();
myDocList.create({title: 'The first doc'}); 
/* no need for an id here if you're using centralized persistence, because 
"create" calls "save" witch in turn does an http post to your server which 
should return a JSON representation of your model including its id (Backbone 
will include it in your model). */

或阅读它们的服务器端:

var myDocList = new DocList();
myDocList.fetch();
/* Backbone will do an http get at DocList.url and create Doc instances with the
   JSON array it should receive from your server*/

至于您的 docList 的表示,如果它是长 HTML 或复杂的 HTML,您确实应该将您的项目附加到一个新创建的元素,然后将此元素附加到您的文档,这可能比重新绘制每个项目快 10 倍左右.

于 2012-12-04T07:32:39.953 回答