本篇内容翻译自《Beginning Backbone.js》,原著作者James Sugrue。转载请注明相关信息。
本文内容接上篇博客内容
模型事件
虽然在本书的后面会讲解事件,但一个特殊的事件对于模型来说非常重要,那就是change事件,当某个属性的值或一组属性值发生变化时会触发change事件。
监听change事件
Backbone中change事件的监听,是监听整个模型变化最简单的方法。事件监听通过使用.on()方法添加到Backbone对象上,该方法接受两个参数,一个是字符串表示的事件类型,另一个是change事件发生时要执行的函数引用。
创建该事件监听的最佳时机是在模型的initialize函数中。通过修改你当前的代码,你会看到每当调用set方法时,事件处理函数总会被执行。
Book = Backbone.Model.extend({ initialize: function(){ this.on('change', function(){ console.log('Model Changed'); }); }, defaults: { name: 'Book Title', author: 'No One' }, printDetails: function(){ console.log(this.get('name') + ' by ' + this.get('author')); } });
你可以通过使用change:<属性名>的形式监听特定属性的change事件,而不是简单的监听change事件。下面增加的代码创建了另一个监听函数以只监听name属性的change事件:
initialize: function(){ this.on('change', function(){ console.log('Model Changed'); }); this.on('change:name', function(){ console.log('The name attribute has changed'); }); }
在前面说到.set方法可以接受一个可选的参数用以表明是否触发静默更新,如果使用了该方法,那么上面的change处理函数将不会被调用。
//设置变量(期望触发change处理函数) thisBook.set('name', 'Different Book'); //change 处理函数被调用 thisBook.set('name', 'Different Book', {silent: true}); //没有change处理函数会被调用
确定什么发生了变化
Backbone中包含了一些属性来跟踪模型中哪些属性发生了变化。如果使用全局的change监听函数,可以非常实用地看到发生的变化。
使用hasChanged('<属性名>')可以检查某个属性是否发生了变化。
this.on('change', function(){ console.log('Model Changes Detected:'); if(this.hasChanged('name')){ console.log('The name has changed'); } if(this.hasChanged('year')){ console.log('The year has changed'); } });
使用.changed属性可以获得所有发生变化的属性集合。
Book = Backbone.Model.extend({ initialize: function(){ this.on('change', function(){ console.log('Changed attributes: ' + JSON.stringify(this.changed)); }); } });
使用.previousAttributes()方法还可以获得所有属性改变前的状态结合。
console.log('Previous attributes: ' + JSON.stringify(this.previousAttributes()));
最后,通过.previous('<属性名>')可以获取某个特定属性改变前的值。
if(this.hasChanged('name')){ console.log('The name has changed from ' + this.previous('name') + ’ to ' + this.get('name')); }
属性改变指南
表3-2描述了模型中与属性改变相关的常用操作。
表3-2 Backbone模型中属性改变相关方法
操作 | 描述 |
.on('change', <function>) | 提供一个全局的change事件监听,能够响应模型中任何属性的变化 |
.on('change:<属性名>', <function>) | 监听某个具体属性的change事件 |
.hasChanged(<attribute name>) | 如果属性在上一次change事件中发生了改变则返回true |
.previous(<属性名>) | 返回某个具体属性改变前的值 |
.changed | 返回模型中所有改变的属性的全集 |
相关推荐
3. **集合(Collections)**:集合是模型的有序列表,它们继承自Backbone.Events,因此可以触发和监听事件。集合有自己的URL,可以进行同步操作,如`fetch`和`create`。集合中的模型可以通过比较ID来保持唯一性。 4...
Backbone.js 建立在 jQuery 和 Underscore.js 之上,因此它可以无缝集成到已经使用这些库的项目中。此外,它还支持通过 RESTful JSON 接口与服务器通信,使得前后端之间的数据交换更加高效。 #### 二、通过 Hello...
在Backbone.js中,集合(Collections)是模型(Models)的有序集合,它们提供了一种组织和操作数据的高效方式。在本文中,我们将深入探讨Backbone.js集合的各个方面,包括其核心概念、功能、API以及在实际开发中的...
Backbone.js框架相对轻量级,它的核心在于模型(Models)、视图(Views)、集合(Collections)和路由(Routers)。本篇文章重点讲解Backbone.js框架中的View视图组件。 Backbone.js的View视图是一个非常重要的部分...
3. **消息传递模式**:在Backbone.Radio中,消息传递模式通过`Radio.channel`来实现。开发者可以创建频道,发布和监听消息,从而实现组件间的解耦通信。 4. **频道(Channel)**:Backbone.Radio的核心是频道概念,...
通过Model,Backbone实现了数据和视图之间的同步,当Model数据发生变化时,与之关联的视图会自动更新,保持数据的即时显示。 2. Collections(集合):Collection用于存储一组Model,提供了添加、移除、排序、过滤...
它通过提供模型(Models)、视图(Views)、集合(Collections)和路由器(Routers)等概念,帮助开发者实现数据与用户界面的双向绑定,以及更好的组织前端代码。在"用Backbone.js写的增删改查列表"这个项目中,我们...
1. **Backbone.js框架**:Backbone.js提供了一套组织前端代码的工具,包括模型(Models)、视图(Views)、集合(Collections)以及路由器(Router)。它依赖于jQuery或Zepto库,用于DOM操作。 2. **模型-视图-控制...
Backbone.js是一个轻量级的JavaScript库,它提供了一种结构化的方式来组织前端应用,尤其适合构建复杂的单页面应用程序(SPA)。在这个“Backbone.js实现的俄罗斯方块游戏源码”中,我们可以深入理解如何利用...
Backbone 为复杂Javascript应用程序提供模型(models)、集合(collections)、视图(views)的结构。其中模型用于绑定键值数据和自定义事件;集合附有可枚举函数的丰富API; 视图可以声明事件处理函数,并通过RESTful ...
Backbone.js是一个轻量级的JavaScript库,它为构建结构化的Web应用提供了基础框架,包括模型(Models)、视图(Views)、集合(Collections)和路由器(Router)。在这个实例中,我们将看到如何整合Backbone.js与...
5. **vendor/**: 第三方库和插件存放的地方。 6. **javascripts/**: Backone.js的源码和应用特定的JavaScript文件。 【kanban github】表明这个项目是在GitHub上开源的,你可以在那里找到项目的完整源代码、问题...
【标题】"前端项目-backbone.collectionView.zip"是一个与前端开发相关的资源包,主要涉及的技术是Backbone.js的CollectionView。在Web开发中,前端框架扮演着至关重要的角色,它们帮助开发者组织代码,提高效率,...
Backbone.js是一个轻量级的JavaScript框架,主要提供了三大组件:models(模型)、collections(集合)和views(视图)。通过这三个组件,可以快速构建复杂的Web应用程序。 Models(模型) Backbone.Model是...
在Backbone.js中,View是用来呈现模型数据的部分,同时也是与用户交互的关键组件。View负责监听事件并对这些事件做出响应,同时还能渲染数据到DOM中。理解View的用途和工作原理对于开发高质量的应用程序至关重要。 ...
7. **JavaScript 文件夹**: 存放所有与Backbone.js相关的代码,如模型、视图、集合、路由器的定义。 **三、开发流程** 1. **初始化应用**:在`index.html`中引入Backbone.js及相关库,如jQuery和Underscore.js,...
Backbone.js是一个轻量级的JavaScript库,它为开发者提供了模型(Models)、视图(Views)、集合(Collections)和路由器(Router)等核心概念,帮助组织前端代码结构,提高可维护性和复用性。Backbone.Projections...
主要提供了3个东西:1、models(模型) 2、collections(集合) 3、views(视图) backbone.js文件本身很小,压缩后只有5.3KB,作为一个框架级别的核心JS文件,这个数字很可怕。 除此之外,这个JS还必须依赖于另一个JS文件...