0

我正在尝试结合文档从其他人的 Backbone 应用程序中学习 Backbone。有两件事我不明白,我无法从文档中弄清楚。希望有人能解释一下...

该应用程序的要点 这是一个应用程序,您可以在其中将公司名称拖放到框中。

该应用程序具有公司视图、公司模型和公司集合。

它还有一个 Bucket View、一个 Bucket Model 和 Buckets Collection

它还有一个不与任何模型关联的通用 App View。

问题...

首先-永远不会渲染视图是否很奇怪?

App View 是这样实例化的

window.App = new AppView();

它会在应用程序中进行不同的操作(使用公司名称等填充存储桶并设置一些事件)。但是,App View 永远不会被渲染。另一方面,Bucket View 和 Company View 都在代码中的不同点呈现。例如,

  var view = new BucketView({model: bucket});
  this.$("#bucket-list").append(view.render().el);

但从来没有那个应用程序视图。这个 App View 也没有渲染功能。那么它有一个从未渲染过的视图是不是很奇怪?它的代码应该在其他地方吗?

第二考虑到 App 视图永远不会被渲染,他们有什么理由必须将默认设置更改为el布局中主容器 div 的名称?例如,在 App 视图中,他们这样做......

el: $("#mainapp"),

但是,如果此视图从未呈现,是否有任何理由更改默认设置el

4

1 回答 1

2

当您正常创建 Backbone.View 实例时,它会立即el为您生成一个视图。这用作视图将管理的所有 HTML 的占位符,并且您通常el在 render 方法中使用 HTML 填充视图,正如您已经指出的那样。

但是,在某些情况下,您不想呈现一组全新的 HTML 元素。相反,您需要管理一些已经是 DOM 一部分的现有 HTML。在这种情况下,您可以通过在构造函数中指定 ,轻松地将主干视图附加到现有 DOM 元素el,如您在该el: $("#mainapp")行中所示。

当一个 Backbone 视图看到它已经有一个el时,它不会生成它自己的。相反,它使用它所传递的东西。

So, to directly answer your two questions:

1) First- Is it weird that a view would never be rendered?

No, because ...

2) if this view's never rendered, is there any reason to change the default setting of el?

The question is slightly off in a manner that that can't be directly answered. In reality, the view is never rendered because they are setting the el in the call to the constructor.

于 2012-04-17T02:45:35.467 回答