用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 ...
随机推荐
- 在Windows和Linux上安装paramiko模块以及easy_install的安装方法
一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...
- python3.5------购物车
笔者:QQ: 360212316 逻辑图 程序代码 # /usr/bin/env python # -*- coding: utf-8 -*- product_list = [ ["ip ...
- 【英语魔法俱乐部——读书笔记】 1 初级句型-简单句(Simple Sentences)
第一部分 1 初级句型-简单句(Simple Sentences):(1.1)基本句型&补语.(1.2)名词短语&冠词.(1.3)动词时态.(1.4)不定式短语.(1.5)动名词.(1 ...
- nagios二次开发(五)---nagios和nagiosql的关系
根据对nagios和nagiosql的了解,笔者简要的将二者的关系粗略的梳理了一下,具体情况如下图所示: 从上面的关系图中可以看出,nagios与nagiosql共享了主机.主机组.服务.服务组等.c ...
- table变色
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- Beat版本分工
柯晓鸿031302613:负责服务器的搭建,struts2框架的配置,后台与页面的连整合,部分后台接口,数据库连接查询接口,以及页面js的书写 比例:40% 洪腾飞031302608:负责主要界面的书 ...
- 查看linux版本
http://nameyjj.blog.51cto.com/788669/557424 1. 查看内核版本命令: 1) [root@q1test01 ~]# cat /proc/version ...
- c++ 中string用c输入输出
对于string自带的函数 c_str()返回的const char*类型,对于scanf函数不能使用,可以通过如下方法使用 string s; scanf("%s",&* ...
- Dalvik指令格式
一段Dalvik汇编代码由一系列Dalvik指令组成,指令语法由指令的位描述与指令格式 标识来决定.位描述约定如下: 每16位的字采用空格分隔开来每个字母表示四位,每个字母按顺序从高字节开始,排列到低 ...
- json_decode返回null 和synax error原因及处理
$checkLogin ='[{"gdsincode":"1103293","gdsname":"鲜美来带鱼段800g" ...