用Backbone.js创建一个联系人管理系统(三)
原文: Build a Contacts Manager Using Backbone.js: Part 3
欢迎回到这系列的教程,关注使用Backbone.js构建应用程序. 如果你还没看过第一,二部分推荐你先看第一二部分~~~~
剩下内容我简单翻译重要部分, 相同类似太多废话了就不说了.
添加model到collection
要添加单独的一个model到collection中. 首先我们要提供一个填写model信息的表.请把下面的html添加到ID为contacts的div中.
<form id="addContact" action="#">
<label for="photo">photo:</label><input id="photo" type="file" />
<label for="type">Type:</label><input id="type" />
<label for="name">Name:</label><input id="name" />
<label for="address">Address:</label><input id="address" />
<label for="tel">Tel:</label><input id="tel" />
<label for="email">Email:</label><input id="email" />
<button id="add">Add</button>
</form>
在ContactView的events里添加点击addbutton的事件
events:{
"click #add": "addContact"
},
在events的后面插入addContact的实现方法
addContact: function (e) {
e.preventDefault(); //不要刷新页面
var newModel = {};
$("#addContact").children("input").each(function (i, el) { //循环表单下每个input生成新的model对象
if ($(el).val() !== "") {
newModel[el.id] = $(el).val();
}
});
contacts.push(newModel);
if (_.indexOf(this.getTypes(), formData.type) === -1) { //如果新的type不在select选择范围内. 把新的type加到select的option
this.collection.add(new Contact(newModel));
this.$el.find("#filter").find("select").remove().end().append(this.createSelect());
} else {
this.collection.add(new Contact(newModel));
}
},
渲染新的model
在initialize()方法中加载新的事件监听.
this.collection.on("add", this.renderContact, this);
给原有的的contact定义 添加新的默认属性
name: "",
address: "",
tel: "",
email: "",
type: ""
从Collection中删除model
首先要在Contact模版文件内添加一个delete button
<button class="delete">Delete</button>
定义事件,还有实现方法
events: {
"change #filter select": "setFilter",
"click #add": "addContact",
"click button.delete": "deleteContact"
},
deleteContact: function () {
var removedType = this.model.get("type").toLowerCase();
this.model.destroy();
this.remove();
if (_.indexOf(directory.getTypes(), removedType) === -1) {
directory.$el.find("#filter select").children("[value='" + removedType + "']").remove();
}
},
删除model数据
在事件监听部分加入
this.collection.on("remove", this.removeContact, this);
实现removeContact方法,添加在addContact方法的后面
removeContact: function (removedModel) {
var removed = removedModel.attributes;
if (removed.photo === "/img/placeholder.png") {
delete removed.photo;
}
_.each(contacts, function (contact) {
if (_.isEqual(contact, removed)) {
contacts.splice(_.indexOf(contacts, contact), 1);
}
});
},
对于表单的处理
在header标签后添加一个打开表单的连接
<a id="showForm" href="#">Add new contact</a>
在events中添加新的事件定义
"click #showForm": "showForm"
随后实现showForm方法
showForm: function () {
this.$el.find("#addContact").slideToggle();
}
下一部分教程介绍如何编辑已经存在的Contact
本教程代码:
http://cdn.tutsplus.com/net/uploads/legacy/1147_bb3and4/3/demo.zip
用Backbone.js创建一个联系人管理系统(三)的更多相关文章
- 用Backbone.js创建一个联系人管理系统(五)
原文: Build a Contacts Manager Using Backbone.js: Part 5 这是这系列教程最后一部分了. 之前所有的增删改都在前端完成. 这部分我们要把Contact ...
- 用Backbone.js创建一个联系人管理系统(一)
原文 Build a Contacts Manager Using Backbone.js: Part 1 在这个教程里我们将会使用Backbone.js,Underscore.js,JQuery创建 ...
- 用Backbone.js创建一个联系人管理系统(四)
原文: Build a Contacts Manager Using Backbone.js: Part 4 这一系列教程的第四部分,教我们如何完成对已经存在的Contacts进行编辑和保存. 本教程 ...
- 用Backbone.js创建一个联系人管理系统(二)
欢迎大家回来继续这一教程,第一部分我们学习了model,collection和view在Backbone中的 基本用法,还有怎么样用主视图去绑定collection去渲染出每个Contact. 这部分 ...
- 使用 SVG 和 JS 创建一个由星形变心形的动画
序言:首先,这是一篇学习 SVG 及 JS 动画不可多得的优秀文章.我非常喜欢 Ana Tudor 写的教程.在她的教程中有大量使用 SVG 制作的图解以及实时交互 DEMO,可以说教程的所有细枝末节 ...
- 用three.js创建一个简易的天空盒
本文创建的天空盒是用六张图片来创建的.笔者会论述两种方法来创建,都是最简单基本的方法,不涉及着色器的使用.一种是创建一个盒子,然后将图片作为盒子6个面的纹理贴上来创建.另一种则是简单的将纹理作为场景的 ...
- Gitlab创建一个项目(三)使用IntelliJ IDEA开发项目
Gitlab创建一个项目 Gitlab创建一个项目(二)创建新用户以及分配项目 1.登陆到gitlab 2.点击项目名,获取http的URL 3.idea打开,选择git 4.设置项目路径以及本地保存 ...
- JS创建一个数组1.求和 2.求平均值 3.最大值 4.最小值 5.数组逆序 6.数组去重 0.退出
rs = require("readline-sync"); let arr = []; console.log("请输入数组的长度:"); let arr_l ...
- 用Backbone.js教程系列的链接
整理了一下用Backbone.js系列教程链接. Backbone.js入门教程 用Backbone.js创建一个联系人管理系统(一) 用Backbone.js创建一个联系人管理系统(二) 用Back ...
随机推荐
- 安装Maven
下载进入官网下载页面:http://maven.apache.org/download.html我用的是windows,下载apache-maven-3.2.5-bin.zip: Maven 3.2. ...
- linux 学习5 文本编辑器 vim
vim 没有菜单,只有命令 //root用户既可以用vi,也可以用vim, 无实质性区别,vim是vi的升级版//粘贴用shift+insert , 要在insert模式下粘贴,否则粘贴不全// ^ ...
- windows访问lnmp配置的虚拟域名
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://linuxzkq.blog.51cto.com/9379412/1630217 实 ...
- MIME Type
一.首先,我们要了解浏览器是如何处理内容的.在浏览器中显示的内容有 HTML.有 XML.有 GIF.还有 Flash --那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 MIME ...
- Spark 读取HBase和SolrCloud数据
Spark1.6.2读取SolrCloud 5.5.1 //httpmime-4.4.1.jar // solr-solrj-5.5.1.jar //spark-solr-2.2.2-20161007 ...
- oracle常用命令大全及心得
学习时整理的 Oracle 1.set linesize 100; 设置长度2.set pagesize 30; 设置每页显示数目3.em a.sql 打开记事本 4.@ a 执行文件a中的代码,可指 ...
- 遗传算法之GAUL
遗传算法之GAUL简介 简介 GAUL(遗传算法工具库的简称) GAUL is an open source programming library, released under th ...
- funny_python 01 import antigravity
在Python里面import antigravity 会发现另一个小彩蛋 Tada~ 其实就是打开了xkcd的一个python主题漫画 鼠标停留在图片上,还会看到标题: "I wrote ...
- EditTextPreference点击后输入框显示隐藏内容,类似密码输入(转)
http://bbs.anzhuo.cn/thread-928131-1-1.html EditTextPreference点击后输入框显示隐藏内容,类似密码输入... [复制链接] aski ...
- Android背景渐变色(shape,gradient)
Android设置背景色可以通过在res/drawable里定义一个xml,如下: <?xml version="1.0" encoding="utf-8" ...