_ensureElement这个方法是内部方法,在构造函数中使用,用于判断指定的el在页面中存不存在,如果存在则对$el进行赋值,如果不存在,则生成一个$el,但是要注意这个对象是没有落地到dom树中的 。
delegateEvents
delegateEvents([events]) // *{"event selector": "callback"}* // // { // 'mousedown .title': 'edit', // 'click .button': 'save', // 'click .open': function(e) { ... } // } delegateEvents: function(events) { //如果不存在events,则直接返回 if (!(events || (events = _.result(this, 'events')))) return this; //先解除所有的事件绑定 this.undelegateEvents(); //处理每个事件 for (var key in events) { var method = events[key]; //解析回调函数 if (!_.isFunction(method)) method = this[events[key]]; if (!method) continue; //对选择器进行分析 var match = key.match(delegateEventSplitter); var eventName = match[1], selector = match[2]; method = _.bind(method, this); //绑定的事件名都是以 eventName + '.delegateEvents' + cid 组成, //这么做能够在undelegateEvents的时候选择到这个View的所有事件 eventName += '.delegateEvents' + this.cid; if (selector === '') { this.$el.on(eventName, method); } else { this.$el.on(eventName, selector, method); } } return this; }
在View中你可以使用一个 key:value 集合指定对应的事件,在初始化的时候构造函数会调用delegateEvents进行绑定,需要注意的是所有在key中指定的元素的父元素都必须是$el,也就是说元素必须是$el的子节点,否则绑定失败。
View和其他backbone模块一个区别就是没有自己的内建自定义事件,当然他也组合了Events模块,但是所有的事件都需要自己进行建立。View主要是一个MVC模型的承载,其实真正的功能不多,其实从模型层面上看V在前端开发中是最接近业务逻辑的,所以在View中大部分的逻辑都是开发者自己去扩展的。
您可能感兴趣的文章: