• 使用require.js和backbone实现简单单页应用实践


    前言

    最近的任务是重做公司的触屏版,于是再园子里各种逛,想找个合适的框架做成Web App.看到了叶大(http://www.cnblogs.com/yexiaochai/)对backbone的描述和他做的一个简单框架demo(http://www.cnblogs.com/yexiaochai/p/3837713.html),于是拿来主义,把源码下载了.

    项目框架

    项目使用VS2012+MYSQL开发,MVC架构,没有叶大那么厉害,只能做做简单应用,下面的做的一个列表和详细页面的JS代码块.

    主要JS代码块:

    <script type="text/javascript">    
        var IndexModel = Backbone.Model.extend({});
        var IndexList = Backbone.Collection.extend({
            model: IndexModel,
            parse: function (data) {
                return (data && data.data) || {}
            },
            setComparator: function (type) {
                this.comparator = function (item) {
                    return Math.max(item.attributes[type]);
                }
            }
        });
        var Detail = Backbone.View.extend({
            el: $("#contents"),
            template: _.template($('#detail-template').html()),
            events: {
                'click #js-return': function () {
                    this.app.forward('index');
                }
            },
            initialize: function (app) {
                this.app = app;
                this.render();
            },
            render: function () {
                var scope = this;
                var id = this.app.id;           
                var model = this.app.model;
                $.ajax({
                    url: '@Url.Action("GetContentById", "Home")',
                    type: 'get',
                    data: { id: id },
                    dataType: 'json',
                    timeout: 1000,
                    error: function () { location.href = '/'; },
                    success: function (data) {
                        if (data && data.data) {
                            model.set('value', data.data);
                            $(".viewport").hide();
                            $('#viewport_detail').show();                                $('#id_viewport_detail').html(scope.template(model.toJSON()));
                        }
                    }
                });
            }
        });
    
        var Index = Backbone.View.extend({
                el: $('#indexlist'),
                template: _.template($('#indexlist-template').html()),
                events: {
                    'click .js_largeimg': function (e) {
                        var el = $(e.currentTarget);
                        var index = el.attr('data-index');
                        var id = el.attr('data-id');
                        var model = this.list.models[index];
                        this.app.model = model;
                        this.app.id = id;
                        this.app.forward('detail/'+id);
                    }
                },
                initialize: function (app) {
                    this.app = app;
                    var scope = this;
                    var curpage = 1;
                    var pageSize = 10;
                    this.list = new IndexList();
                    this.list.url = '@Url.Action("GetIndexList", "Home")';
                    this.list.fetch({
                        success: function () {
                            scope.render();
                        }
                    });
                    this.listenTo(this.list, 'all', this.render);
    
                },
                render: function () {
                    var models = this.list.models;
                    var html = '';
                    for (var i = 0, len = models.length; i < len; i++) {
                        models[i].index = i;
                        html += this.template(_.extend(models[i].toJSON(), { index: i }));
                    }
                    $(".viewport").hide();
                    $("#viewport_index").show();
                    $("#indexlist").html(html);
                    var s = '';
                }
            });
    
            var App = Backbone.Router.extend({
                routes: {
                    "": "index",    // #index
                    "index": "index",    // #index
                    "detail/:id": "detail"   // #detail
                },
                index: function () {
                    var index = new Index(this.interface);
    
                },
                detail: function (id) {
                    var detail = new Detail(this.interface);
                    detail.app.id = id;
                },
                initialize: function () {
    
                },
                interface: {
                    forward: function (url) {                    
                        window.location.href = ('#' + url).replace(/^#+/, '#');
                    }
                }
            });
            var app = new App();
            Backbone.history.start();
            var s = '';
    </script>  

    实现效果不错,继续努力不断优化ing..........

  • 相关阅读:
    Case用法
    SQL 常用函数及示例
    ms-SQL 递归调用
    office2003 下载地址 及密码
    [LeetCode] 697. Degree of an Array 数组的度
    [LeetCode] 58. Length of Last Word 求末尾单词的长度
    [LeetCode] 288.Unique Word Abbreviation 独特的单词缩写
    [LeetCode] 287. Find the Duplicate Number 寻找重复数
    [LeetCode] 350. Intersection of Two Arrays II 两个数组相交II
    [LeetCode] 349. Intersection of Two Arrays 两个数组相交
  • 原文地址:https://www.cnblogs.com/hedgerow/p/4095113.html
Copyright © 2020-2023  润新知