【原创】backbone1.1.0源码解析之View.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【原创】backbone1.1.0源码解析之View

囧,文章昨儿就发布了,结果移出了首页。 好吧,我再详细说一下吧~~ ? 作为MVC框架,M(odel) ?V(iew) ?C(ontroler)之间的联系是必不可少的,今天要说的就是View(视图) 通常我们在写逻辑代码也好或者是在ui组件也好,都需要跟dom打交道,我们好讨厌在逻辑代码里面参杂dom的代码,特别是需要生产dom的代码, 因为这样的缺点: 1. 耦合,难于维护(虽然模版引擎能解决一些问题,但是事件的添加呢?) 2. 代码无法做到美观,节俭,感觉和dom参杂在一起就是一个字,乱!! ? 介于这样的缺点,Backbone提供了一个View类,用于构造对象,它可以做到一下几点: 1. 帮你创建dom,你只要负责去渲染这个dom就行了(我们用模板引擎就行dom的渲染就很合理) 2. 帮你为dom添加(代理)事件,所以无需自己去手动绑定事件啦,而只需要提供events的参数。 ? 这样下来,上面的两个缺点基本都解决了~~ ? View(视图) 视图对象用来封装前端的dom元素,也就是说跟dom元素关联在一起,视图的改变即是对应dom元素的改变。 因此我们在创建视图类或者在构造视图对象的时候,我们需要传递dom元素,我们可以这样: 1. 构造视图对象时,传递el参数,可以是jquery对象,也可以是dom对象(前提是该dom元素在页面里面已存在) ? 1 2 3 var bookView = new Backbone.View({ ????el : $(#id)??? // jquery对象,或dom对象 }); ?而接下来我们要做的就只是往这个dom元素里添加内容了,像这样: ? 1 2 3 4 5 6 7 initialize : function () { ?????? ????var tpl =xxx; ????var data = {...}; ?? ????this.$el.html(_.template(tpl, data)); } 这里我们更建议你去使用_.template这样的的模板函数就渲染dom,会显得代码更节俭,美观 ? 2. 创建视图类时,传递tagName(默认是div),让View来帮你创建dom元素 ? 1 2 3 4 5 6 7 8 9 10 11 var BookView = Backbone.View.extend({ ?? ????tagName : span }); var bookView = new BookView({ ????attributes : { ????????title : xxx? // span的标签的属性 ????}, ?? ????id : demo }); 记住最后render时要将这个元素append到页面里面去,因为这里的dom元素是通过tagName,Backbone在内部创建的,并未添加到文档流中去。 ? 说到dom元素,当然就有事件,向click,hover等事件是必不可少的,有了事件才有了交互,有了交互才会有数据(model)的变化才会有dom(view)的更新。 所以接下来要说一下如何给已有dom添加事件 1. 在创建视图类的时候,可以通过events参数添加事件,像这样: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var BookView = Backbone.View.extend({ ?? ????tagName : span, ?? ????events : { ?? ????????mouseenter : function () {...},? // 事件,某一函数(this对象指向view实例) ?? ????????click a.item : say? // 事件代理,为class为item的a标签代理,调用view对象的say方法 ?? ????}, ?? ????say : function () { ????????console.log(this); ????} }); ? 注意: ? ? ?(1)Backbone的事件都是添加在视图关联的那个dom元素(el)上,那么该元素就有可能成为其子元素的事件代理元素(冒泡原理) ? ? ?(2)事件的回调函数中的this是该视图对象 ? ? ?(3)click a.item 这里是一个事件代理, ? ? ?(4)回调函数如果不是函数,是字符串,那么会到view对象中获取对应的方法,想这里的say其实是viewObj.say ? 2. 当然我们也可以通过调用delegateEvents方法添加事件,像这样: ? 1 2 3 4 5 6 7 8 var bookView = new

文档评论(0)

abf4675328 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档