Backbone.js系列教程十三:建立一个简单联系人应用

概述

想象一下,你正在使用一个电子表格工具。首先创建一个叫做联系人的表单(也就是一个集合),然后定义表单中的数据域标题,在标题中输入"first name", "last name" 和 "phone" (一个模型)。基本上,你已经有了一个保管联系数据的电子表单({firstName:"Jane, lastName:"Doe", phone:"111-111-1111"})。现在你想要从表单中使用这些信息创建一个UI(一个视图)来查看/添加/删除联系人。Backbone能 够做到!让我们开始吧!

继承Backbone.Model,创建Contact函数/类


  1. var Contact = Backbone.Model.extend({
  2. defaults: {
  3. firstName: null,
  4. lastName: null,
  5. phone: null
  6. },
  7. getFullName: function(){
  8. return this.get("firstName") +" "+ this.get("lastName");
  9. }
  10. });

实例化contacts集合,传递一个模型构造函数/分类与一个联系人


  1. var contacts = new Backbone.Collection({ //为其添加一些数据
  2. firstName: "Jane",
  3. lastName: "Doe",
  4. phone: "111-111-1111"
  5. }, {
  6. model: Contact
  7. });

继承Backbone.View,创建AddContactsView,实例化一个实例


  1. var ContactListView = Backbone.View.extend({
  2. el: "#contacts",
  3. events: {
  4. "click li button": "removeContact"
  5. },
  6. initialize: function () {
  7. this.render(); //渲染列表
  8. this.listenTo(contacts, "add remove", this.render); //the magic
  9. },
  10. removeContact: function (e) {
  11. $(e.target).parent("li").remove();
  12. contacts.findWhere({
  13. firstName: $(e.target).parent("li").find("span").text().split(" ")[0].trim(),
  14. lastName: $(e.target).parent("li").find("span").text().split(" ")[1].trim()
  15. }).destroy(); //将调用内部 "remove"事件
  16. },
  17. render: function () {
  18. if (contacts.length > 0) {
  19. this.$el.empty();
  20. contacts.each(function (contact) {
  21. this.$el.append("<li><span>" + contact.getFullName() + "</span>"+" / "+ contact.get("phone") + "<button type="button" class="btn-xs btn-danger removeContactBtn">X</button></li>");
  22. }, this);
  23. }
  24. }
  25. });
  26. var contactListViewInstance = new ContactListView();

继承Backbone.View,创建ContactListView,实例化一个实例


  1. var AddContactsView = Backbone.View.extend({
  2. el: "fieldset",
  3. events: {
  4. "click button": "addContact"
  5. },
  6. addContact: function () {
  7. var firstName = this.$("#firstName").val();
  8. var lastName = this.$("#lastName").val();
  9. var phone = this.$("#phone").val();
  10. if (firstName && lastName && phone) {
  11. contacts.add({ //将调用Backbone内部 "add"事件
  12. firstName: firstName,
  13. lastName: lastName,
  14. phone: phone
  15. });
  16. this.$("input").val("");
  17. }
  18. }
  19. });
  20. var addContactsViewInstance = new AddContactsView();

实例示范

下面是本小节关于联系人应用程序的工作演示。检查应用程序代码,直到完全理解创建过程中每一部分(即模型、收集、视图)的角色和功能。需要参考前几个小节的内容。


结论

这篇文章指导读者彻底了解Backbone视图,模型和集合。在本文的下一部分,我们将尝试同步以及将同步模型的方法与集合关联到后台。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索实例
, backbone
, this
, phone
, contacts
, 一个
, li的简单应用
js联系人删除按钮
,以便于您获取更多的相关知识。

时间: 2024-09-28 11:05:37

Backbone.js系列教程十三:建立一个简单联系人应用的相关文章

Backbone.js系列教程一 - Backbone.js简介

JavaScript在web应用程序开发前端技术和后端技术的逻辑与运行一块占有越来越大的比重.为了帮助维护和循环访问前期逻辑和模块性,MVC模式在近几年中渐渐普及.其中一种运用广泛的MVC框架就是Backbone.js. Backbone中的Models(模型).Views(视图)和Controller(控制器) Backbone.js包含以下几个主要功能: 创建模型(以及模型集合): 创建视图: 管理绑定,管理事件兼用不同的模型以及视图与框架其他部分的联系: 在模型中使用观察者模式,一旦模型触

Backbone.js系列教程九:Backbone实用程序库

利用Backbone.noConflict()存储和创建一个特殊的(就是自定义命名空间)引用到Backbone 当Backbone被浏览器解析时,Backbone做的第一件事就是存储一个引用到包含在全局作用域(也就是window.Backbone)中 的Backbone的值.这是因为Backbone重写或占据了这个命名空间,希望给开发者机会去存储在Backbone被解析之前使用的初值.这就是 Backbone.noConflict()起作用的时候了.调用Backbone.noConflict()

Backbone.js系列教程十:Backbone.View

在前几节中我们介绍了Backbone基础知识,如果你还没有阅读过,那么我建议你从第一节开始学习--Backbone.js系列教程一:Backbone.js初探,尤其希望你能完全理解构造Backbone对象相 关知识,这对于学习今后的内容有很大帮助.在接下来的几个小节中,我们将深入Backbone,讨论Backbone views.models和collections.相信大家在阅读前文之后,已经对Backbone.View.Backbone.Model. Backbone.Collection构

Backbone.js系列教程二:Backbone.js深入解析之基础要求

在网上关于Backbone的描述很少,现有的关于Backbone的内容五花八门,基本上都不同程度的提到了如何运用Backbone来实现应用程序的创建,当然也有很多的是讨论它是否匹配Model/View/Whatever.有挺多华而不实的视频教程是讲程序设计的,但其实没有什么太大的价值.我认为关键是缺少了关于Backbone本身的详细介绍,以及对于每行代码的真正用意的细节描述.有篇文档专门讲述Backbone各部分的功能,在一定程度上解答了上述问题,并且提供带有注释的源代码,还有更多相关Backb

Backbone.js系列教程三:深入解析之框架,模型视图

Backbone下的框架设想 Backbone是用于开发SPA(AKA单页应用)环境.你可能想要知道这些是什么.简单的讲,SPA就是一个加载了一个页面 (index.html或者app.html)的web应用,整个应用通过自定义事件,自定义URL句柄,和异步HTTP检索,存储资源来发送到客户端, 这样避免了页面的重复加载.基本上,SPA框架只加载一个HTML页面,因此JavaScript可以用于仿写/重写/编排浏览器上传统web应用框架的 默认属性. 让我们检验Backbone SPA的框架假设

Backbone.js系列教程四:Backbone全面介绍

Backbone的原理 Backbone的初衷在于单页面应用程序中添加架构,尤其是在创造DocumentCloud应 用程序的过程中,以避免重复性的DOM交叉以及DOM中用于保持UI同步的数据发生混乱.Backbone通过一套构造函数来完成这个步骤,于是就形成了 模型.集合与视图对象,目的在于组织应用程序的数据.逻辑和显示.一旦这些对象被具现化,它们彼此之间就存在特殊的关系,共同保证了应用程序的模块化.松 耦合性(利用event系统沟通).可扩展性. Backbone提供应用程序架构,还能帮助构

Backbone.js系列教程六:构造Backbone对象

Backbone构造函数 我之所以说Backbone很简单,是因为Backbone只有四个构造函数能被典型的实例化(基本上,它们首先被继承或子分类).这四种构造函数包括: Backbone.Model = function(attributes, {options}){}; Backbone.Collection = function([models], {options}){}; Backbone.Router = function({options}){}; //只能被具现化一次  Back

Backbone.js系列教程十一:Backbone.Model

Backbone.Model概论 一个Backbone 模型可以比作一张表单结构,头部类似表单的列,数据类似表单的行.Backbone.Model对象定义列标签,再用预定义和自定义的方法包裹每一行里的 数据(即属性),以便进行数据转换.验证和访问控制.由Backbone.Model创建模型实例或者一个继承的Backbone.Model,提供对象 到实际数据的存储.例如,一个联系应用程序中的联系模型就像下面这样:  你可以把一个Backbone.Model构造函数比作表单的列标题,其方法和属性通用

Backbone.js系列教程七:Backbone.Router

Backbone.router()概述 一个Backbone route是一个JavaScript字符串,类似于传统认识中的URL路径名. 这个像字符串的路径名是一个函数的属性名(或引用命名函数),当在浏览器中有url与字符串匹配时被调用.举例来说,下例中的url包含路径名 "help" ,在一个单独的Backbone应用页面中它将通告Backbone调用一个函数,这个函数关联了名为'help"的路由. http://www.hostname.com/#help 请注意,路径