zoukankan      html  css  js  c++  java
  • 用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

  • 相关阅读:
    中学数学
    XBT Tracker 服务器配置
    【转】>Unity3d动态数据管理(Export AssetBundles)
    [转]MySQL 5.1.56 for Windows XP/Vista/7
    [转]全面理解Unity加载和内存管理
    [转]Unity3D Editor 编辑器简易教程
    Dow falls 97 points, worst showing this year
    [转]Boost库编译后命名方式
    free falling
    01、Direct3D 11 Basics
  • 原文地址:https://www.cnblogs.com/dangkei/p/5047433.html
Copyright © 2011-2022 走看看