Backbone总结

Authors
  • avatar
    Name
    小明&小艺
    Twitter

为什么选择 Backbone

项目之初,需要选择一个框架作为底层开发,当时想到的是 angular、backbone、vue,其都是 MV*的开发方式。而我考虑的几点是

  1. 学习成本低,可以快速上手
  2. 框架的利用率和总体体积
  3. 框架的更新周期
  4. 框架的讨论热度 兼顾这几方面,选择了 Backbone。Backbone 的视图功能是比较单一和广泛的,可以随意使用,没有太多的条条框框。但是不足的是 Collection 和 Model 的功能跟 View 不匹配,View 对于 Collection 和 Model 而言显得有点功能单薄。

Backbone

Backbone 的视图创建很简单,只是创建了几个公共的方法和提供一些事件监听和发布的发放,其自身不具备模板功能,和视图与 Model 的绑定功能,很多事情还是需要自己在程序里编写。

Backbone 的 Router 可以实现前端的路由,而且还具备了 pushState 实现无刷新跳转,不过这样子需要取消所有的跳转。Router 的不足是不能创建多个子的 Router 配置,所有的配置都扔到一个地方,也是挺难维护的。另外 Router 还无法监听匹配不上的事件,后来在源码里发现它找不到匹配的路由时直接跳过了,什么都没有做,所以需要监听的话,可以重写它的 loadurl 方法。

Backbone.history.loadUrl = function(fragment) {
    fragment = this.fragment = this.getFragment(fragment);
    var result =  _.any(this.handlers, function(handler) {
      if (handler.route.test(fragment)) {
        handler.callback(fragment);
        return true;
      }
    });
    if(result == false){
      Backbone.history.trigger("router:nomatch", fragment);
    }
    return result;
  }

Backbone 的 Model 和 Collection 支持 ResetApi,不过在项目中没怎么用,因为接口也不是 resetApi 风格的,基本都是自己写后端的数据请求。

Backbone 在使用的时候需要注意视图的划分,划分得太细需要写太多的代码,但是耦合太多,则后期可能不好维护,需要一些经验做基础,预测一下可变的部分。