用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 ...
随机推荐
- 磁盘阵列(RAID)实例
raid技术分类可以分为基于软件raid技术和基于硬件raid技术 raid又分为raid-0.raid-1.raid-5和raid-10 Raid有”廉价磁盘冗余阵列”的意思,就是利用多块廉价的硬盘 ...
- TFS Build Definition And Auto Deploy
一台build machine上一般只有一个build service[对应一个build controller]来serve一个team project collection,但又workaroun ...
- 一个简单的零配置命令行HTTP服务器
http-server 是一个简单的零配置命令行HTTP服务器, 基于 nodeJs. 如果你不想重复的写 nodeJs 的 web-server.js, 则可以使用这个. 安装 (全局安装加 -g) ...
- linux 学习6 软件包管理 资料链接
软件包管理 这一章看得比较随意 先大概记点东西. RPM安装很繁琐,因为依赖性,手动安装太麻烦. ______我觉得直接yum在线安装就好了,很直接方便. 但是要特别注意的地方 在用yum升级或者卸载 ...
- RHCA-红帽认证架构师
OpenStack: 向部署应用 配置域.数据源子系统.中实施应用安全 迁移应用至 介绍集群 考试代码 任选其中五门: (红帽企业虚拟化) (红帽企业部署和系统管理) (红帽企业服务器硬化) (红帽企 ...
- NodeJS 常用模块
NodeJS 模块: n:NodeJS 版本管理/切换 参考: https://github.com/tj/n ExpressJS:Web 框架 参考: http://expressjs.com/ m ...
- C++ 里大写TRUE和小写true区别
1.C++里大写TRUE和小写true区别 true是bool型的: TRUE是int型的,VC里这个是ms自己定义的: C++规定不允许只通过返回类型不同区别两个函数 2.MFC中的”false“和 ...
- 一个简单的左侧固定右侧自适应demo
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- 学习shell脚本笔记
1.if 是单分支语句,使用格式如下: if condition ; then statement ….. fi 2.if … else 是双分支语句,使用格式如下: if condition ; t ...
- error-2016-1-18
SSL 连接出错 错误: "System.Net.Mail.SmtpException"类型的未经处理的异常在 System.dll 中发生 其他信息: SMTP 服务器要求安全连 ...