认识Backbone (四)
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 (四)相关推荐
- 用大白话讲Single-shot Alignment Network(S2A-NET)
文章目录 前言 本文是对论文:Align Deep Features for Oriented Object Detection 的学习总结,通过个人理解,尽可能以通俗易懂的方式表述,以方便大家的理解 ...
- 用Backbone.js创建一个联系人管理系统(四)
原文: Build a Contacts Manager Using Backbone.js: Part 4 这一系列教程的第四部分,教我们如何完成对已经存在的Contacts进行编辑和保存. 本教程 ...
- 15、backbone实战:webchat(四)server端开发
上一篇把web端构建了一下,这一篇来构建服务器端. 关于django开发应用,相比大家都已经熟悉了,不熟悉的可以移步到这里:django使用 webchat的整体目录结构还是同todos一样,有图有真 ...
- 在线学位课程_您在四年制计算机科学学位课程中学到的知识
在线学位课程 by Colin Smith 通过科林·史密斯 您在四年制计算机科学学位课程中学到的知识 (What you learn in a 4 year Computer Science deg ...
- 汇总|目标检测中的数据增强、backbone、head、neck、损失函数
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:Tom Hardy https://zhuanlan.zhihu.com/p/137769687 ...
- 打通多个视觉任务的全能Backbone:HRNet
HRNet是微软亚洲研究院的王井东老师领导的团队完成的,打通图像分类.图像分割.目标检测.人脸对齐.姿态识别.风格迁移.Image Inpainting.超分.optical flow.Depth e ...
- 把大核卷积拆成三步,清华胡事民团队新视觉Backbone刷榜了,集CNN与ViT优点于一身...
梦晨 发自 凹非寺 量子位 | 公众号 QbitAI 在视觉任务上,CNN.ViT各有各的优势和劣势. 于是,以经典Backbone为基础.细节上相互借鉴,成了最近一个热门研究方向. 前有微软Swin ...
- 速度超Mask RCNN四倍,仅在单个GPU训练的实时实例分割算法
这个带分割是25帧,有漏检. 速度超Mask RCNN四倍,仅在单个GPU训练的实时实例分割算法 原文:速度超Mask RCNN四倍,仅在单个GPU训练的实时实例分割算法 | 技术头条 https:/ ...
- 网络原理(四)-----动态路由协议篇
本篇博客涉及到静态与动态路由协议相关知识,适合na进阶np使用. 路由协议: 在路由器之间确定路径和维护路由表,分为四种: 1.直连路由协议: 2.默认路由协议: 3.静态路由协议: 4.动态路由协议 ...
最新文章
- 基于 HTML5 的 WebGL 技术构建 3D 场景(一)
- mysql docker 2003_解决远程连接mysql 报 2003错误的问题(docker)
- Python数据相关系数矩阵和热力图轻松实现
- python学习日常-编码与字符串格式化
- 学习Bootstrap知识记录点-----导航菜单操作
- 央广记者在自律联盟现场采访京都贷执行董事长
- 【Java】对Web Service的理解
- DateTimeToUnix/UnixToDateTime 对接时间转换
- (android实战)创建查看试卷答案功能(类似于疯狂小鸟的选关)
- 行上下移动_这有一台你迟早要用到的手持式“移动空调”
- 「爬虫入门」拒绝跟热点搞python,直接在浏览器里体验『第一次』,理解原理=>如鱼得水
- MySQL为啥不用平衡二叉树_MySQL的索引,为什么是B+而不是平衡二叉树
- BMNNSDK部署Sophone算丰智算盒SE5系列教程(超详细版)
- base64加密后字符串自动换行问题
- x86、ARM和MIPS三种主流芯片架构
- DOS定时关机命令 windowXp
- python使用RSA加密算法
- Flask构建微信订餐小程序②-全站统计
- 灵活用工系统开发|劳务派遣有风险吗?
- python_爬虫_豆瓣TOP250_url
热门文章
- 微信小程序之ajax服务器交互及页面渲染
- 【迁移学习(Transfer L)全面指南】不需要时关闭autograd的方法:torch.no_grad
- 题解 P1918【 保龄球 】python和C++
- html如何扩大div,HTML – 如何让绝对div适合父宽度/填充?
- linux底层硬件需求,Linux系统的硬件设备驱动的底层结构讲解
- c#使用正则表达式获取TR中的多个TD_一个 Vue 模板可以有多个根节点(Fragments)?
- java从磁盘读取图片_java 怎样从磁盘读取图片文件
- android 4.2 桌面快捷方式,Android 添加桌面快捷方式操做
- vs mysql搭建_VS+mysql+EF搭建
- 5G RRC——为NAS层提供连接管理,消息传递等服务; 对接入网的底层协议实体提供参数配置的功能; 负责UE移动性管理相关的测量、控制等功能...