【问题标题】:Backbone: what's the point of a View that's never rendered?Backbone:从未渲染过的视图有什么意义?
【发布时间】:2012-04-17 10:45:35
【问题描述】:

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

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

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

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

它还有一个不与任何模型关联的通用应用视图。

问题...

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

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 的默认设置?

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

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

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

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

    所以,直接回答你的两个问题:

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

    不,因为...

    2) 如果该视图从未渲染,是否有任何理由更改 el 的默认设置?

    这个问题有点偏题,无法直接回答。实际上,视图永远不会被渲染因为他们在构造函数的调用中设置了el

    【讨论】:

    • 谢谢...我从未提到过的一件事。视图永远不会将任何内容呈现到 el 中:$("#mainapp")...然后它怎么能像您所说的那样“管理一些现有的 html”?我错过了什么吗?
    • Backbone 视图将基本上控制#mainapp 元素。 #mainapp 中存在的任何 html 元素都将直接可用于视图,以及视图的事件等。这篇博文可能会帮助您了解正在发生的事情:lostechies.com/derickbailey/2011/09/26/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    相关资源
    最近更新 更多