2014/08/13 – Backbonejs

[来自: Backbone.js 开发秘笈 第7章]

Restful 服务调用

  Collection.fetch() - 请求集合

  Model.save() - 新增或修改模型(根据 Model.isNew() 方法判断操作类型)

  Model.destroy() - 删除模型

  Model.sync() - 请求的执行方法, fetch(), save(), destroy() 都调用其方法进行操作请求

(function ($) {
    //define -------------------------------
    var Product = Backbone.Model.extend({
        idAttribute: "Id",
        url: "/ProductService.svc/Product"//Rest URL
    });
    var ProductCollection = Backbone.Collection.extend({
        model: Product,
        url: "/ProductService.svc/products"//rest URL
    });
    var ProductListView = Backbone.View.extend({
        tagName: "ul",
        events: {
            "click": "selectName"
        },
        selectName: function (e) {
            if (e.target.nodeName === "A") {
                this.collection.trigger("selected", this.collection.get($(e.target).attr("data-id")));
            }
        },
        render: function () {
            this.$el.html(_.map(this.collection.models, function (model) {
                return "<li><a href=‘javascript:;‘ data-id=‘" + model.get(‘Id‘) + "‘>" + model.get(‘Name‘) + "</a></li>";
            }));
            return this;
        }
    });
    var EditPanelView = Backbone.View.extend({
        tagName: "div",
        events: {
            "click .btnUpdate": "update",
            "click .btnCreate": "create",
            "click .btnDestroy": "destroy"
        },
        update: function () {
            /* Backbone MethodMap
                create: "POST"
                delete: "DELETE"
                patch: "PATCH"
                read: "GET"
                update: "PUT"
            */
            /* 参数二
                {
                    patch:true // is PATCH method
                    wait:true //同步方法
                }
            */
            this.model.save({
                ‘Name‘: this.$el.find("input[type=‘textBox‘]")[0].value
            }, { success: this.success, operType: "update" });
        },
        create: function () {
            //Collection.create() 方法回调用 Model.save() 方法
            new Product({
                Name: this.$el.find("input[type=‘textBox‘]")[0].value
            }).save(null, { success: this.success, operType: "create" });
        },
        destroy: function () {
            this.model.destroy({ success: this.success, url: this.model.url + "/" + this.model.get(‘Id‘), operType: "destroy" });
        },
        success: function (model, data, options) {
            //operate callback
            switch (options.operType) {//operType 自定义属性,标识回调函数的操作类型
                case "create":
                    break;
                case "update":
                    break;
                case "destroy":
                    break;
                default:
            }
        },
        render: function () {
            this.$el.html("<label>Name:</label><input type=‘textBox‘ value=‘" + this.model.get("Name") + "‘>" +
                "<input type=‘button‘ class=‘btnUpdate‘ value=‘Update‘/>" +
                "<input type=‘button‘ class=‘btnCreate‘ value=‘Create‘/>" +
                "<input type=‘button‘ class=‘btnDestroy‘ value=‘Destroy‘/>");
            return this;
        }
    });
    $(function () {
        //instance ---------------------------------
        var productCollection = new ProductCollection();
        //fetch() 方法获取数据    [success and error 是成功的和异常的回调函数]
        /* fetch, save, destroy 方法都会调用 sync() 方法来执行 HTTP 请求 */
        /* sync() 方法参数
            method - [create, update, patch, delete, read]
            model - 需要同步的模型或集合
            options - $.ajax 所需要的参数
        */
        productCollection.fetch({
            success: function (collection, response, options) {
                collection.on("selected", function (model) {
                    $("#divEdit").html(new EditPanelView({ model: model }).render().el);
                });
                $(‘body‘).html(new ProductListView({ collection: collection }).render().el);
                $(‘body‘).append($("<div id=‘divEdit‘></div>"));
            },
            error: function (collection, response, options) {
                alert(‘error‘);
            }
        });
    });
})(jQuery);

2014/08/13 – Backbonejs

时间: 2024-11-07 04:11:17

2014/08/13 – Backbonejs的相关文章

2014/08/05 – Backbonejs

[来自: Backbone.js 开发秘笈 第2章] Model API: (function ($) { //define Model Class ------------------- var ModelClass = Backbone.Model.extend({ defaults: {},//Backbone 支持在模型初始化时动态进行定义 [支持多行表达式设置默认值,即值为函数] initialize: function () { //模型对象被创建后即被调用 /* 注:如定义了默认属

2014/08/04 – Backbonejs

[来自: Backbone.js 开发秘笈 第1章] 各种模型实际上是通过扩展其基类 Backbone.Model 实现的.同理,定义的集合是靠扩展其基类 Backbone.Collection 而实现的. 控制器的功能被分散实现在 Backbone.Router 和 Backbone.View 当中. 路由器负责处理 URL 的变化,并且委派一个视图来继续处理应用.路由器(异步)获取模型后,随即触发一个视图的更新操作. 视图负责监听 DOM 事件.它要么对模型进行更新,要么通过路由器转移到应用

2014/08/11 – Backbonejs

[来自: Backbone.js 开发秘笈 第6章] Template 用法: 通过 Underscore.js 提供的 _.template() 方法,我们可使用 <% ... %> 包含js代码:使用 <%= ... %> 输出变量值:使用 <%- ... %>输出转义后的变量值. (function ($) { //define ------------------------- var UserModel = Backbone.Model.extend(); v

2014/08/06 – Backbonejs

[来自:Backbone.js 开发秘笈 第3章] Collection API (function ($) { //define ----------------------------- var ModelD = Backbone.Model.extend({ defaults: { ID: 0, Name: '' }, idAttribute: 'ID' }); //定义集合对象 /* 在其内部,模型被存储在一个名为 models 的数组当中 */ var CollectionD = Ba

2014/08/14 – Backbonejs

[来自: Backbone.js 开发秘笈 第8章] 相关技术: 1. 使用 Require.js 组织项目结构 文件结构: index.html lib/ underscore.js jquery.js backbone.js js/ app.js userDefine.js index.html: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <titl

2014/08/08 – Backbonejs

[来自: Backbone.js 开发秘笈 第5章] Event API: (function ($) { //define ------------------------- var obj = {}; var obj2 = { commonEvent: function () { window.document.title = new Date().toString(); } }; //扩展对象包含事件 _.extend(obj, Backbone.Events); _.extend(obj

Bootstrap 3.2.0 源码试读 2014/08/04

第一部分 normalize.css 用于解决不同浏览器下显示不一致的问题 8至12行 html {   font-family: sans-serif;    /* 设置默认字体为 sans-serif */   -webkit-text-size-adjust: 100%;    /* 手机等设备转屏时,字体大小随着自动调整 */       -ms-text-size-adjust: 100%;    /* 但是如果禁用了缩放功能,则此设置无效 */ } text-size-adjust由

Bootstrap 3.2.0 源码试读 2014/08/09

第一部分 normalize.css 104至110行 code,    /* 编辑代码 */ kbd,    /* 键盘输入的文本 */ pre, samp {    /* 范例,sample的简写 */   font-family: monospace, monospace;    /* 这个地方应该是写错了,第二字体应该是serif */   font-size: 1em; } 设置字体的大小为1em,字体为monospace. 111至119行 button, input, optgro

在MyEclipse配置自己安装的Tomcat(2014.08.18)

今天因为要在tomcat下运行一个java项目,第一次嘛,遇到了不少问题,总结分享一下: 第一次,我直接将 MyEclipse 生成的项目放到 tomcat 安装目录的 webapps 目录下,运行出现404,无法访问. 然后想了想,发现这是个错误的做法.应该先通过 MyEclipse 将项目部署到 Tomcat 下: 然后, MyEclipse 自带了 tomcat,我要配置自己安装的 TomCat : (请看参考资料:http://jingyan.baidu.com/article/4853