2014/08/04 – Backbonejs

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

各种模型实际上是通过扩展其基类 Backbone.Model 实现的。同理,定义的集合是靠扩展其基类 Backbone.Collection 而实现的。

控制器的功能被分散实现在 Backbone.Router 和 Backbone.View 当中。

路由器负责处理 URL 的变化,并且委派一个视图来继续处理应用。路由器(异步)获取模型后,随即触发一个视图的更新操作。

视图负责监听 DOM 事件。它要么对模型进行更新,要么通过路由器转移到应用的其他部分。

Backbone 依赖 Underscore , JQuery 或 Zepto 。

Backbone.Router 只是用来定义路由以及相关的回调函数,而其他所有的重要工作则全部都由 Backbone.history 完成。作为窗口中的全局路由器, Backbone.history 负责处理 hashchange 或者 pushState 事件、匹配到合适的路由以及触发回调函数。你永远不用为( Backbone.history )这个全局路由器创建一个实例,因为到你使用路由器时, Backbone 会自动创建。

Backbonejs 插件: https://github.com/jashkenas/backbone/wiki/Extensions,-Plugins,-Resources

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8"/>
        <title></title>

        <script src="lib/jquery.js"></script>
        <script src="lib/underscore.js"></script>
        <script src="lib/backbone.js"></script>
        <script src="js/main.js"></script>
    </head>
<body>

</body>
</html>

index.html
(function ($) {
    $(function () {

        /* define */

        //Mode--------------------------------------------------

        var InvoiceItemMode = Backbone.Model.extend({
            defaults: {
                price: 0,
                quantity: 0
            },
            calculateAmount: function () {
                return this.get(‘price‘) * this.get(‘quantity‘);
            }
        });

        //View---------------------------------------------------
        var PreviewInvoiceItemView = Backbone.View.extend({
            template: _.template(‘Price: <%= price %>. Quantity: <%= quantity %>. Amount: <%= amount %>.‘),
            render: function () {
                var html = this.template({
                    price: this.model.get(‘price‘),
                    quantity: this.model.get(‘quantity‘),
                    amount: this.model.calculateAmount()
                });

                $(this.el).html(html);
            }
        });

        //Router-------------------------------------------------
        var Workspace = Backbone.Router.extend({
            routes: {
                ‘‘: ‘invoiceList‘,
                ‘invoice‘: ‘invoiceList‘
            },
            invoiceList: function () {
                var invoiceListView = new PreviewInvoiceItemView({
                    model: new InvoiceItemMode({
                        price: 2,
                        quantity: 3
                    }),
                    el: ‘body‘
                });
                invoiceListView.render();
            }
        });

        /* apply */

        //instance-----------------------------------------------
        /*
        var invoiceItemMode = new InvoiceItemMode({
            price: 2,
            quantity: 3
        });
        var previewInvoiceItemView = new PreviewInvoiceItemView({
            model: invoiceItemMode,
            el: ‘body‘
        });
        */

        //execute------------------------------------------------
        //previewInvoiceItemView.render();
        new Workspace();
        Backbone.history.start();
    });
})(jQuery);

main.js

2014/08/04 – Backbonejs,布布扣,bubuko.com

时间: 2024-12-25 11:21:11

2014/08/04 – 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,读书,《Matlab概率与数理统计分析》-第1章 MATLAB的数据基础

第1章 MATLAB数据基础 虽然一直间或使用MATLAB,但从来没有系统的学习过,现在开始也不晚.先对几个重点或者平时忽略的要点做下笔记. %后的所有文字为注释,多条命令可以放在一行,但要用逗号或分号隔开,命令后的逗号表示显示结果,分号表示禁止显示结果. 符号…表示语句的余下部分将出现在下一行,但不能出现在变量名或运算符之间. M文件又称Script文件,具有全局性,文件中的所有变量在整个工作环境中有效. 命令: cumsum(x,dim),求累积和,matlab中cumsum函数通常用于计算

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由

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/13 – Backbonejs

[来自: Backbone.js 开发秘笈 第7章] Restful 服务调用 Collection.fetch() - 请求集合 Model.save() - 新增或修改模型(根据 Model.isNew() 方法判断操作类型) Model.destroy() - 删除模型 Model.sync() - 请求的执行方法, fetch(), save(), destroy() 都调用其方法进行操作请求 (function ($) { //define ----------------------

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/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