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 (四)的更多相关文章

  1. JavaScript--模块化编程(笔记)

    一直对JS都是一知半解,最近遇到这方面问题,所以在网上学习了一下,现在还没有完全明白,先贴出笔记; 第一章 JavaScript模块化编程(一):模块的写法 一 原始写法 // 模块就是实现特定功能的 ...

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

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

  3. Backbone源码解析(四):View(视图)模块

    View视图故名思义,它控制的是界面.我们可以把一个大的网页分成很多部分的视图,按照backbone的架构,每一个视图对应都是一个对象,我们可以通过元素的钩子(id或者class或者其他选择器)把它们 ...

  4. (四)backbone - DEMO - 通信录

    DEMO介绍 是DEMO - User List 的扩展,增加查询 大体实现 •创建Contact Model var Contact = Backbone.Model.extend({ defaul ...

  5. 使用backbone的history管理SPA应用的url

    本文介绍如何使用backbone的history模块实现SPA应用里面的URL管理.SPA应用的核心在于使用无刷新的方式更改url,从而引发页面内容的改变.从实现上来看,url的管理和页面内容的管理是 ...

  6. backbone入门示例

    最近因为有个项目需要用backbone+mui  所以最近入坑backbone. Backbonejs有几个重要的概念,先介绍一下:Model,Collection,View,Router.其中Mod ...

  7. 前端MVC框架Backbone 1.1.0源码分析系列

    Backbone.js 是一个在JavaScript环境下的 模型-视图-控制器 (MVC) 框架.任何接触较大规模项目的开发人员一定会苦恼于各种琐碎的事件回调逻辑.以及金字塔般的代码.而且,在传统的 ...

  8. 用backbone实现的一个MVC的小demo

    一.Apache配置 本实例需要使用php支持.要现在Apache中配置虚拟目录,在Apache下的httpd-vhosts.conf文件中添加如下代码 <VirtualHost *:80> ...

  9. 我对Backbone.js的一些认识

    backbone.js已经不是当前最流行的前端框架了,但是对于我而言,依然具有比较好的学习价值.虽然目前来说,react,vue等mvvm框架非常火热,但是感觉自身还不到去使用这种框架的层次.这些技术 ...

随机推荐

  1. java特权制度设计篇

    数据库表设计 1.1.1.   模块管理(jk_module) 项 类型 说明 id long 就是数据库记录idx号 name string 模块名称 orderid int 排序id  由小到大显 ...

  2. 方案猿身高project联赛,艺术家,相反,养殖场!-------三笔

    已经看到了程序猿在电影中都是非常厉害的人物,硬道理键盘噼里啪啦后,奇妙的事情会发生. 当我报了这个专业,開始认真的写程序,在这个领域学习的时候,却发现非常多干这一行 的都自称"码农" ...

  3. 为什么php时间阅读RTF,p标签会出现红色

    为什么php读取富文本的时候,p标签会出现红线,怎么去掉,哪位大侠帮解决?跪求答案 就像以下一样,一遇到p标签就有红虚线 版权声明:本文博客原创文章,博客,未经同意,不得转载.

  4. jsoncpp使用

    第一个github网站下载jsoncpp最新的版本库:https://github.com/open-source-parsers/jsoncpp 点击右下角的Download ZIP进行下载 解压后 ...

  5. 基于Opencv图像处理的时时头像採集试验

    2014 4.20 近期想做一个关于图像处理的软件玩玩,可惜也没有什么特别的想法,就当玩玩好了,准备用Opencv开源库实现下简单的功能吧. Opencv是一个专业的图像处理库,里面有非常多基础函数能 ...

  6. 通用型CRM还是行业型CRM?-定制为王

    大数据时代,怎样利用工具摆脱繁杂的数据管理之苦,洞察有价值的销售信息,是每一个管理者的迫切须要.Zoho  CRM问世10年来,见证了一个个行业客户怎样在CRM帮助下实现了效率和业绩提升.相同,广泛的 ...

  7. jvm理论

    三大流行jvm sun HotSpot ibm j9 BEA JRockit Oracle 会基于HotSpot整合 JRockit. jvm运行时数据区 java虚拟机所管理的内存将会包括以下几个运 ...

  8. Wix打包系列(四) 自定义UI

    原文:Wix打包系列(四) 自定义UI 除了标准的安装界面,如果我们要在安装时需要提供一些额外的信息时,这时就需要自定义界面来显示和录入这些信息. 4.1  自定义对话框 如上一章中我们测试数据库的连 ...

  9. hdu4352(数位dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4352 题意:求区间L到R之间的数A满足A的的数位的最长递增序列的长度为K的数的个数. 分析:数位dp, ...

  10. Linux下安装Python3.3.0

    Linux下安装Python3.3.0_路易_新浪博客 Linux下安装Python3.3.0 (2013-01-08 11:45:37)