backbone 源码解析

来源:互联网 发布:java 强引用 弱引用 编辑:程序博客网 时间:2024/06/04 19:28

1  Backbone.Events 是backbone 框架的基础对象,Backbone.Model 、Backbone.Collection 、Backbone.View 都继承了Backbone.Events 对象。

     Backbone.Events 封装了事件的基本操作,如 绑定 、触发 、解除绑定 等常用操作,以及一些不太常用的操作,如:只触发一次的事件。

 // Extend a given object with all the properties in passed-in object(s).  _.extend = function(obj) {    each(slice.call(arguments, 1), function(source) {      if (source) {        for (var prop in source) {          obj[prop] = source[prop];        }      }    });    return obj;  };

通过extend 函数,让Model 、 Collection 、View 都继承Event 属性,即让Model 、 Collection 、View 等都具有事件处理功能
why 用extend 属性的方式扩展类?而非用prototype chain 的方式呢?
细想,其实用prototype chain 也是可行的,但是作者用上述extend 方式,我觉得可以用以下原因解释
1 如果用prototype chain 方式,那么就建立了is-a 的关系。Model is kind of event? 说不通
2 用上述extend 方式,我觉得主要原因是Model 等主要是利用Event实现自身能力增强,而非 is-a 的关系
Model 是 存、取 数据的类,主要的取数据函数有:
构造函数 -> 利用初始化属性赋值
fetch函数-> 利用外部数据,对model重新赋值
可能触发事件的函数有:
set函数,触发change 事件
fetch函数,触发sync 事件
destroy函数,触发destory、sync 事件
validate函数,触发invalid 事件
Collection 是Model 对象的集合。这样,Collection 当然也有存、取数据的功能,此外,Collection 还有对集合进行管理的一些功能,如:push 、pop at、shift等
Collection ,主要的取数据的函数有:
构造函数 -> 利用初始化models 对象,赋值
fetch函数 -> 利用外部数据进行models 的赋值
create函数 -> 在Collection 对象中,创建一个Model 对象(这个model 对象是通过model的构造函数初始化)
View 负责创建一个Dom,负责UI渲染,UI事件响应、数据模型Model的事件绑定处理等功能
通过delegateEvents 函数,实现对事件的绑定




原创粉丝点击