Code Monkey

于工开始移山

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[来自: 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

 

posted on 2014-08-05 22:10  MSchina  阅读(130)  评论(0编辑  收藏  举报