我正在尝试从其他人的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视图也没有渲染功能。所以它有一个从未呈现过的View是奇怪的吗?它的代码应该在别的地方吗?
第二次考虑到从未呈现过应用视图,是否有任何理由需要将el
的默认设置更改为布局中主容器div的名称?例如,在App视图中,他们这样做......
el: $("#mainapp"),
但是,如果此视图从未呈现,是否有任何理由更改el
的默认设置?
答案 0 :(得分:2)
正常创建Backbone.View实例时,它会立即在视图上生成el
。这用作视图将管理的所有HTML的占位符,并且您通常在渲染方法中使用HTML填充视图的el
,正如您已经注意到的那样。
但在某些情况下,您不希望呈现一组全新的HTML元素。相反,您需要管理一些已经属于DOM的现有HTML。在这种情况下,您可以通过在构造函数中指定el
,轻松地将主干视图附加到现有DOM元素,就像您使用el: $("#mainapp")
行所示。
当Backbone视图看到它已经有el
时,它不会生成它自己的。相反,它使用的是它。
所以,直接回答你的两个问题:
不,因为......
问题略微偏离,无法直接回答。实际上,视图永远不会呈现因为它们在构造函数的调用中设置el
。