Backbone.View(视图)

  视图的核心是处理数据业务逻辑、绑定DOM元素事件、渲染模型或者集合数据。

  添加DOM元素 

  render view.render() render 默认实现是没有操作的。 重载本函数可以实现从模型数据渲染视图模板,并可用新的 HTML 更新 this.el。 推荐的做法是在 render 函数的末尾 return this 以开启链式调用。

var testview = Backbone.View.extend({id: 'show',render: function (content) {//this.el.innerHTML = content;//document.body.appendChild(this.el);this.$el.html(content).appendTo($('body'));}
});
var test = new testview();
test.render("hello world!");

  访问模型对象 

var Book = Backbone.Model.extend({defaults:{title: 'backbone',author: 'Jeremy Ashkenas'}
});
var book = new Book({title:'ios',author:'apple'});var BookView = Backbone.View.extend({id: 'show',render: function(){this.$el.html(JSON.stringify(this.model)).appendTo($('body'));}
});
var bookview = new BookView({model: book});
bookview.render();

  访问集合对象

var booklist = [{title:'ios',author:'apple'},{title:'android',author:'google'},{title:'Windows Phone',author:'microsoft'}
];
var books = new Backbone.Collection(booklist);var BookView = Backbone.View.extend({id: 'show',render: function(){var html = '';_.each(this.collection.models,function(book){html += JSON.stringify(book)+'';});this.$el.html(html).appendTo($('body'));}
});
var bookview = new BookView({collection: books});
bookview.render();

  使用模板 

  template view.template([data])  虽然模板化的视图 不是Backbone直接提供的一个功能, 它往往是一个在视图定义template函数很好的约定。

<script type="text/template" id="templateID"><%= code > 60 ? '及格' : '不及格' %>
</script>

var ksView = Backbone.View.extend({id: 'show',initialize: function(){this.template = _.template( $('#templateID').html() );this.$el.appendTo($('body'));},render: function(num){this.$el.html( this.template({code: num}) );}
});
var ksview = new ksView();
ksview.render(50);
<script type="text/template" id="template"><ol><li>系统:<%=system %></li><li>公司:<%=company %></li></ol>
</script>

var System = Backbone.Model.extend({defaults: {'system': '','company': ''}
});
var system = new System({'system': 'ios','company': 'apple'
});var systemView = Backbone.View.extend({id: 'show',initialize: function(){this.template = _.template( $('#template').html() );this.$el.appendTo($('body'));},render: function(){this.$el.html( this.template(this.model.toJSON()) );}
});
var view = new systemView({model: system});
view.render();
//自定义模板格式
_.templateSettings = {interpolate: /\{\{(.+?)\}\}/g
};
var template = _.template("Hello {{ name }}!");
console.log( template({name: "Backbone"}) );_.templateSettings = {interpolate: /\$(.+?)\$/g
};
var template = _.template("Hello $name$!");
console.log( template({name: "Backbone"}) );

  绑定事件

var View = Backbone.View.extend({el: '#view',initialize: function(){this.render();},render: function(){this.$el.html('这是一个绑定视图事件的容器').appendTo($('body'));},events: {'click': 'alertHello',},alertHello: function () {alert('hello world!');}
});
var view = new View();
<script type="text/template" id="templateFile"><input type="button" id="btn" value="<%= name %>" /><div id="box" style="display:none;"><%= message %></div>
</script>

var View = Backbone.View.extend({id: 'view',initialize: function(){this.template = _.template( $('#templateFile').html() );this.$el.appendTo($('body'));this.render();},render: function(){this.$el.html( this.template({name: '点击我试试',message: '哇,你把我挖出来了'}) );},events: {'click #btn': 'toggle'},toggle: function(){$('#box').slideToggle();}
});
var view = new View();

delegateEvents delegateEvents([events]) 采用 jQuery 的on函数来为视图内的 DOM 事件提供回调函数声明。 如果未传入 events对象,使用 this.events 作为事件源。 事件对象的书写格式为 {"event selector": "callback"}。 省略 selector 则事件被绑定到视图的根元素(this.el)。 默认情况下,delegateEvents 会在视图的构造函数内被调用,因此如果有 events 对象,所有的 DOM 事件已经被连接, 并且我们永远不需要去手动调用本函数。

undelegateEvents undelegateEvents() 删除视图所有委托事件。如果要从临时的DOM中禁用或删除视图时,比较有用。

<script type="text/template" id="templateFile"><input type="button" id="btn1" value="点我触发事件" /><input type="button" id="btn2" value="点我删除绑定事件" /><input type="button" id="btn3" value="点我重新绑定事件" /><div id="box" style="display: block;">哇,你好棒啊!</div>
</script>

var View = Backbone.View.extend({id: 'view',initialize: function(){this.template = _.template( $('#templateFile').html() );this.$el.appendTo($('body'));this.render();},render: function(){this.$el.html( this.template() );},events: {'click #btn1': 'toggle','click #btn2': 'unbindEvent'},toggle: function(){$('#box').slideToggle();},bindEvent: function(){this.delegateEvents( this.events );},unbindEvent: function(){this.undelegateEvents();}
});
var view = new View();
$('#btn3').on('click', function() {view.bindEvent();
});

转载于:https://www.cnblogs.com/eyeear/p/4701070.html

认识Backbone (四)相关推荐

  1. 用大白话讲Single-shot Alignment Network(S2A-NET)

    文章目录 前言 本文是对论文:Align Deep Features for Oriented Object Detection 的学习总结,通过个人理解,尽可能以通俗易懂的方式表述,以方便大家的理解 ...

  2. 用Backbone.js创建一个联系人管理系统(四)

    原文: Build a Contacts Manager Using Backbone.js: Part 4 这一系列教程的第四部分,教我们如何完成对已经存在的Contacts进行编辑和保存. 本教程 ...

  3. 15、backbone实战:webchat(四)server端开发

    上一篇把web端构建了一下,这一篇来构建服务器端. 关于django开发应用,相比大家都已经熟悉了,不熟悉的可以移步到这里:django使用 webchat的整体目录结构还是同todos一样,有图有真 ...

  4. 在线学位课程_您在四年制计算机科学学位课程中学到的知识

    在线学位课程 by Colin Smith 通过科林·史密斯 您在四年制计算机科学学位课程中学到的知识 (What you learn in a 4 year Computer Science deg ...

  5. 汇总|目标检测中的数据增强、backbone、head、neck、损失函数

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:Tom Hardy https://zhuanlan.zhihu.com/p/137769687 ...

  6. 打通多个视觉任务的全能Backbone:HRNet

    HRNet是微软亚洲研究院的王井东老师领导的团队完成的,打通图像分类.图像分割.目标检测.人脸对齐.姿态识别.风格迁移.Image Inpainting.超分.optical flow.Depth e ...

  7. 把大核卷积拆成三步,清华胡事民团队新视觉Backbone刷榜了,集CNN与ViT优点于一身...

    梦晨 发自 凹非寺 量子位 | 公众号 QbitAI 在视觉任务上,CNN.ViT各有各的优势和劣势. 于是,以经典Backbone为基础.细节上相互借鉴,成了最近一个热门研究方向. 前有微软Swin ...

  8. 速度超Mask RCNN四倍,仅在单个GPU训练的实时实例分割算法

    这个带分割是25帧,有漏检. 速度超Mask RCNN四倍,仅在单个GPU训练的实时实例分割算法 原文:速度超Mask RCNN四倍,仅在单个GPU训练的实时实例分割算法 | 技术头条 https:/ ...

  9. 网络原理(四)-----动态路由协议篇

    本篇博客涉及到静态与动态路由协议相关知识,适合na进阶np使用. 路由协议: 在路由器之间确定路径和维护路由表,分为四种: 1.直连路由协议: 2.默认路由协议: 3.静态路由协议: 4.动态路由协议 ...

最新文章

  1. 基于 HTML5 的 WebGL 技术构建 3D 场景(一)
  2. mysql docker 2003_解决远程连接mysql 报 2003错误的问题(docker)
  3. Python数据相关系数矩阵和热力图轻松实现
  4. python学习日常-编码与字符串格式化
  5. 学习Bootstrap知识记录点-----导航菜单操作
  6. 央广记者在自律联盟现场采访京都贷执行董事长
  7. 【Java】对Web Service的理解
  8. DateTimeToUnix/UnixToDateTime 对接时间转换
  9. (android实战)创建查看试卷答案功能(类似于疯狂小鸟的选关)
  10. 行上下移动_这有一台你迟早要用到的手持式“移动空调”
  11. 「爬虫入门」拒绝跟热点搞python,直接在浏览器里体验『第一次』,理解原理=>如鱼得水
  12. MySQL为啥不用平衡二叉树_MySQL的索引,为什么是B+而不是平衡二叉树
  13. BMNNSDK部署Sophone算丰智算盒SE5系列教程(超详细版)
  14. base64加密后字符串自动换行问题
  15. x86、ARM和MIPS三种主流芯片架构
  16. DOS定时关机命令 windowXp
  17. python使用RSA加密算法
  18. Flask构建微信订餐小程序②-全站统计
  19. 灵活用工系统开发|劳务派遣有风险吗?
  20. python_爬虫_豆瓣TOP250_url

热门文章

  1. 微信小程序之ajax服务器交互及页面渲染
  2. 【迁移学习(Transfer L)全面指南】不需要时关闭autograd的方法:torch.no_grad
  3. 题解 P1918【 保龄球 】python和C++
  4. html如何扩大div,HTML – 如何让绝对div适合父宽度/填充?
  5. linux底层硬件需求,Linux系统的硬件设备驱动的底层结构讲解
  6. c#使用正则表达式获取TR中的多个TD_一个 Vue 模板可以有多个根节点(Fragments)?
  7. java从磁盘读取图片_java 怎样从磁盘读取图片文件
  8. android 4.2 桌面快捷方式,Android 添加桌面快捷方式操做
  9. vs mysql搭建_VS+mysql+EF搭建
  10. 5G RRC——为NAS层提供连接管理,消息传递等服务; 对接入网的底层协议实体提供参数配置的功能; 负责UE移动性管理相关的测量、控制等功能...