认识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 > ? '及格' : '不及格' %>
</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();
});
认识Backbone (四)的更多相关文章
- JavaScript--模块化编程(笔记)
一直对JS都是一知半解,最近遇到这方面问题,所以在网上学习了一下,现在还没有完全明白,先贴出笔记; 第一章 JavaScript模块化编程(一):模块的写法 一 原始写法 // 模块就是实现特定功能的 ...
- 用Backbone.js创建一个联系人管理系统(四)
原文: Build a Contacts Manager Using Backbone.js: Part 4 这一系列教程的第四部分,教我们如何完成对已经存在的Contacts进行编辑和保存. 本教程 ...
- Backbone源码解析(四):View(视图)模块
View视图故名思义,它控制的是界面.我们可以把一个大的网页分成很多部分的视图,按照backbone的架构,每一个视图对应都是一个对象,我们可以通过元素的钩子(id或者class或者其他选择器)把它们 ...
- (四)backbone - DEMO - 通信录
DEMO介绍 是DEMO - User List 的扩展,增加查询 大体实现 •创建Contact Model var Contact = Backbone.Model.extend({ defaul ...
- 使用backbone的history管理SPA应用的url
本文介绍如何使用backbone的history模块实现SPA应用里面的URL管理.SPA应用的核心在于使用无刷新的方式更改url,从而引发页面内容的改变.从实现上来看,url的管理和页面内容的管理是 ...
- backbone入门示例
最近因为有个项目需要用backbone+mui 所以最近入坑backbone. Backbonejs有几个重要的概念,先介绍一下:Model,Collection,View,Router.其中Mod ...
- 前端MVC框架Backbone 1.1.0源码分析系列
Backbone.js 是一个在JavaScript环境下的 模型-视图-控制器 (MVC) 框架.任何接触较大规模项目的开发人员一定会苦恼于各种琐碎的事件回调逻辑.以及金字塔般的代码.而且,在传统的 ...
- 用backbone实现的一个MVC的小demo
一.Apache配置 本实例需要使用php支持.要现在Apache中配置虚拟目录,在Apache下的httpd-vhosts.conf文件中添加如下代码 <VirtualHost *:80> ...
- 我对Backbone.js的一些认识
backbone.js已经不是当前最流行的前端框架了,但是对于我而言,依然具有比较好的学习价值.虽然目前来说,react,vue等mvvm框架非常火热,但是感觉自身还不到去使用这种框架的层次.这些技术 ...
随机推荐
- Java-WebSocket 项目的研究(三) WebSocketClient 类 具体解释
通过之前两篇文章 Java-WebSocket 项目的研究(一) Java-WebSocket类图描写叙述 Java-WebSocket 项目的研究(二) 小试身手:client连接server并发送 ...
- Vijos P1881 闪烁的星星
背景 星光闪耀--深蓝色空间 听说过他们的语言 沉默 暮 他们称赞深相互 描写叙述 繁星, 漫天的繁星. 繁星排成一列, 我数一数呀, 一共同拥有N仅仅小星星呢. 星星们是听话的好孩子, 小岛在指挥它 ...
- Java读取本地文件,并显示在JSP文件中
当我们初学IMG标签时,我们知道通过设置img标签的src属性,能够在页面中显示想要展示的图片.其中src的值,可以是磁盘目录上的绝对,也可以是项目下的相对路径,还可以是网络上的图片路径.在存 ...
- 持续集成环境Jenkins的搭建和使用
这几天试着搭了个持续集成环境,我使用的是Jenkins,它的前身是Hadson,由于被Oracle收购了,所以换个名字继续开源,这个有点像MySQL. 持续集成总是跟敏捷开发什么的搞在一起,显得非常高 ...
- graphterm 0.40.1 : Python Package Index
graphterm 0.40.1 : Python Package Index graphterm 0.40.1 Downloads ↓ A Graphical Terminal Interface ...
- IBM之MQ使用指南
随着计算机网络和分布式应用的不断发展.远程消息传递越来越成为应用系统中必不可少的组成部分. 商业消息中间件的出现保证了消息传输的可靠性,高效率和安全性,同一时候也降低了系统的开发周期. 眼下应用最多的 ...
- 深入理解Tomcat系列之一:系统架构(转)
前言 Tomcat是Apache基金组织下的开源项目,性质是一个Web服务器.下面这种情况很普遍:在eclipse床架一个web项目并部署到Tomcat中,启动tomcat,在浏览器中输入一个类似ht ...
- Ajax改动购物车
1.购物车类的设计 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hpeWVxaWFuZ2xkaA==/font/5a6L5L2T/fontsize/4 ...
- Groovy常见语法汇总
一.groovy是什么 简单地说,Groovy 是下一代的java语言,跟java一样,它也运行在 JVM 中. 作为跑在JVM中的另一种语言,groovy语法与 Java 语言的语法很相似.同时,G ...
- WPF换肤之八:创建3D浏览效果
原文:WPF换肤之八:创建3D浏览效果 上节中,我们展示了WPF中的异步以及界面线程交互的方式,使得应用程序的显示更加的流畅.这节我们主要讲解如何设计一个具有3D浏览效果的天气信息浏览器. 效果显示 ...