javascript - Backbone.js:.render() 和 .remove() 应该能够相互逆转吗?

标签 javascript model-view-controller architecture backbone.js

因为 Backbone.js 非常灵活,我想知道某些事情的最佳方法。在这里,我想知道我是否应该构建我的应用程序的 View ,以便“.render()”和“.remove()”正确地相互反转。

起初,看起来最简洁的方法是向 View 传递一个 ID 或要附加到的 jQuery 元素。但是,如果以这种方式完成,调用“.render()”将无法正确替换 DOM 中的 View ,因为主元素永远不会放回 DOM 中:

App.ChromeView = Backbone.View.extend({
  render: function() {
    // Instantiate some "sub" views to handle the responsibilities of
    // their respective elements.
    this.sidebar = new App.SidebarView({ el: this.$(".sidebar") });
    this.menu = new App.NavigationView({ el: this.$("nav") });
  }
});

$(function() {
  App.chrome = new App.ChromeView({ el: $("#chrome") });
});

对我来说,最好将其设置为 .remove() 和 .render() 正好相反:

App.ChromeView = Backbone.View.extend({
  render: function() {
    this.$el.appendTo('body');
    this.sidebar = new App.SidebarView({ el: this.$(".sidebar") });
    this.menu = new App.NavigationView({ el: this.$("nav") });
  }
});

$(function() {
  App.chrome = new App.ChromeView();
});

Backbone.js 社区怎么说? .remove() 和 .render() 应该是同一枚硬币的两面吗?

最佳答案

我更喜欢 render 不将 View 的元素附加到 dom。我认为这促进了松散耦合、高内聚、 View 重用,并促进了单元测试。我将呈现的元素附加到容器,直到路由器或主“布局”类型的容器 View 。

remove 的好处在于它可以在 View 不了解父元素的情况下工作,因此仍然是松耦合和可重用的。我绝对不喜欢将我的布局 HTML(#main 或其他)中的随机 DOM 选择器放入我的 View 中。那里的耦合肯定不好。

我会注意到,在某些恼人的情况下,有些事情会像 chosen jQuery plugin需要一些代码在元素附加到 DOM 后运行。对于这些情况,我通常会在 View 中实现一个 postAttach() 回调,并尽量减少那里的代码量。

关于javascript - Backbone.js:.render() 和 .remove() 应该能够相互逆转吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10216203/

相关文章:

javascript - 无法在 iOS phonegap adobe build 上使用 navigator.camera.getPicture

javascript - 如何为引用图像 url 编写 javascript,以便在使用相同脚本的任何页面上编写图像和显示?

model-view-controller - MVC - 除了 set/get 成员之外,哪些方法应该在 Model 类中?

javascript - 使用 toggleClass 在图像高度 250px - 450px 之间切换?

javascript - 每次我调用一个对象时如何运行一个函数

php - MVC + Service Layer 在 zend 或 PHP 中常见吗?

java - 镜像无法更新其他组件(MVC)

architecture - 表示层/公共(public)服务层。一个常用术语?

web-services - 你能构建一个 RESTful 业务逻辑层吗?

c++ - 在网络上查找和分发字典更改的最佳方式