zoukankan      html  css  js  c++  java
  • Framework7——封装

    强依赖:jQuery,Framework7 3,除非不支持jQuery,不然就是不支持Framework7,不然不可能不兼容
    封装原则:在未来可能使用其他框架的前提下,在保证框架的可用性的同时,尽可能地提高复用性,尽量去除Framework7的个性化代码,一个组件一个对象,根据开发逐步添加函数
    相对的,如果使用Vue或者其它,最好不要一起操作同一个dom,因为封装基于jQuery的dom操作
    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title></title>
        <!-- framework7 -->
        <link rel="stylesheet" href="framework7/dist/css/framework7.min.css">
        <link rel="stylesheet" href="framework7/dist/css/framework7.md.min.css">
    </head>
    <body>
    <div id="container" class='main-table' id="as-main-table" style="overflow: hidden">
    </div>
    
    <br>
    
    <div id="container2" class="list links-list">
    </div>
    
    </body>
    
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript" src="framework7/dist/js/framework7.min.js"></script>
    <script>
        var app = new Framework7({
            root: '#app',
            name: 'My App',
            id: 'main_app',
            panel: {
                swipe: 'left'
            },
            touch: {
                tapHold: true //enable tap hold events
            },
            dialog: {
                // set default title for all dialog shortcuts
                title: '提示框',
                // change default "OK" button text
                buttonOk: '确定',
                buttonCancel: '关闭'
            },
            // Add default routes
            routes: [
                {
                    path: '/about/',
                    url: 'about.html',
                }
            ]
        });
    
        /**
         * Framework7
         *
         * 封装原则:在未来可能使用其他框架的前提下,在保证框架的可用性的同时,尽可能地提高复用性,尽量去除Framework7的个性化代码
         **/
        function SeabootFramework7(option) {
            var root = $(document);
            if (typeof option !== 'undefined') {
                initDom(option);
                root = option.dom;
            }
    
            /**
             * 查找dom对象
             * */
            function initDom(option) {
                if (typeof option.elem === 'string') {
                    option.dom = root.find(option.elem);
                } else if (typeof option.elem === 'object') {
                    option.dom = option.elem;
                } else {
                    throw 'elem is undefined!';
                }
            }
    
            /**
             * 绑定值
             */
            function bindValue(dom, data) {
                dom.find('*').each(function () {
                    var d = $(this), id = d.attr('id');
                    if (typeof id !== 'undefined') {
                        var v = data[id];
                        if (typeof v !== 'undefined') {
                            d.text(v);
                        }
                    }
                })
            }
    
            /**
             * 内置模版渲染
             **/
            function compile(str, data) {
                return Template7.compile(str)(data);
            }
    
            //-----------组件--------------
    
            //--Accordion start----
            function Accordion(dom, option) {
                //格式:var adapter = {renderItem: '', renderContent: '', initItem:'',initContent:''};
                var adapter = option.adapter, arr = option.data;
    
                /**
                 * 渲染html
                 */
                function renderHtml() {
                    var list = [arr.length];
                    for (var i = 0, len = arr.length; i < len; i++) {
                        list[i] = '<li class="accordion-item "><div class="item-content item-link">' +
                                adapter.renderItem(arr[i], i) +
                                '</div><div class="accordion-item-content"></div></li>';
                    }
                    var html = '<div class="list accordion-list" style="margin-top: 8px;padding: 0 8px"><ul style="border:1px solid #c8c7cc">' +
                            list.join('') +
                            '</ul></div>';
                    dom.html(html);
                }
    
                function renderChild() {
                    var lis = dom.find('ul:first').children('li');
                    var isInitItem = typeof adapter.initItem === 'function';
                    var isInitContent = typeof adapter.initContent === 'function';
                    var i = 0;
                    lis.each(function () {
                        var d = arr[i]
                                , li = $(this)
                                , itemDom = li.children('.item-content')
                                , contentDom = li.children('.accordion-item-content');
                        //渲染html
                        contentDom.html(adapter.renderContent(itemDom, d, i));
                        //事件及其它
                        if (isInitItem) {
                            adapter.initItem(itemDom, d, i);
                        }
                        //事件及其它
                        if (isInitContent) {
                            adapter.initContent(contentDom, d, i);
                        }
                        i++;
                    });
                }
    
                function create() {
                    renderHtml();
                    renderChild();
                }
    
                return {
                    setAdapter: function (a) {
                        adapter = a;
                    },
                    create: create
                }
            }
    
            //--Accordion end----
    
            /**
             * 组件的封装原则:
             *    参照android的做法,一个组件一个对象,因为没有布局的概念,所以只有一种接口规范,
             *    全局统一样式,不提供个性化css微调,必须调整直接操作dom
             *
             *    构造函数:ListView(dom, option),
             *        dom:     dom对象
             *        option:     elem:   元素
             *                  data:   数据
             *                  adapter:适配器,个性化代码渲染
             *
             *  adapter:提供给用户创建一个组件的回调函数,至少包含下面两个函数
             *        renderItem: 第一个回调函数必定是data,返回值必须是html字符串
             *        initItem:   初始化代码,第一个回调参数必定是dom,第二个回调必定是data
             **/
            //--ListView start--
            function ListView(dom, option) {
                //格式:var adapter = {renderItem: renderItem(data),initItem:initItem(dom, data)};
                var adapter = option.adapter, arr = option.data;
    
                //供未来微调
                function renderHtml() {
                    var list = [arr.length];
                    for (var i = 0, len = arr.length; i < len; i++) {
                        list[i] = '<li>' + adapter.renderItem(arr[i], i) + '</li>';
                    }
                    var html = '<div class="list links-list"><ul>' +
                            list.join('') +
                            '</ul></div>';
                    //完成渲染
                    dom.html(html);
                }
    
                function renderChild() {
                    var lis = dom.find('ul:first').children('li');
                    var isInitItem = typeof adapter.initItem === 'function';
                    if (isInitItem) {
                        var i = 0;
                        lis.each(function () {
                            var d = arr[i], li = $(this);
                            //事件及其它
                            adapter.initItem(li, d, i);
                            i++;
                        });
                    }
                }
    
                function create() {
                    renderHtml();
                    renderChild();
                }
    
                return {
                    setAdapter: function (a) {
                        adapter = a;
                    },
                    create: create
                }
            }
    
            //--ListView end--
    
            /**
             * 函数
             **/
            return {
                bindValue: bindValue,
                compile: compile,
                createAccordion: function (o) {
                    initDom(o);
                    return new Accordion(o.dom, o);
                },
                createListView: function (o) {
                    initDom(o);
                    return new ListView(o.dom, o);
                }
            };
        }
    
    
        var boot = SeabootFramework7();
    
        //test listView
        var listView = boot.createListView({
            elem: '#container2'
            , data: [{name:'xiaoming'}, {name:'xiaodong'}]
            , adapter: {
                renderItem: function (data, i) {
                    return '<a href="#">' +
                            '<div style="text-indent: 10px;"><span>' +data.name+ '</span></div>' +
                            '<div>' + i + '</div>' +
                            '</a>';
                },
                initItem: function (dom, data, i) {
                    dom.click(function () {
                        console.log(i);
                    })
                }
            }
        });
    
        //创建函数,供触发加载
        listView.create();
    
        //test accordion
        var accordion = boot.createAccordion({
            elem: '#container'
            , data: [{name:'xiaoming'}, {name:'xiaodong'}]
            , adapter: {
                renderItem: function (data, i) {
                    return '<div class="item-inner" style="font-size: 20px;">' +
                            '<div class="item-title">' + data.name + '</div>' +
                            '<div>' +i+ '</div>' +
                            '</div>';
                },
                renderContent: function (dom, data, i) {
                    return '<div class="list links-list">' +
                            '<ul class="location_ui_city">' +
                            '<li value="3bb035f7-28dd-4ba0-b358-d567d62901fb"><a href="#" class="">' +
                            '<div style="text-indent: 10px;">'+data.name + '--' + '</div>' +
                            '<div>3</div>' +
                            '</a></li>' +
                            '<li value="1ccca336-d662-4ebd-a998-02dc0f626bf3"><a href="#" class="">' +
                            '<div style="text-indent: 10px;">'+i+'</div>' +
                            '<div>657</div>' +
                            '</a></li>' +
                            '</ul>' +
                            '</div>';
                },
                initItem: function (dom, data, i) {
                    boot.bindValue(dom, data);
                },
                initContent: function (dom, data, i) {
                    dom.click(function () {
                        console.log(i)
                    });
                }
            }
        });
    
        accordion.create();
    
    </script>
    </html>
  • 相关阅读:
    Linux提供哪些功能
    C++——重载原理分析
    C++——多维数组动态开辟与释放
    C++——异常处理
    C++——流类库和输入/输出
    C++——virtual function
    C++——虚函数表解析
    C++——多态实现原理分析
    Python基础——__name__变量
    DNS服务——智能域名解析、镜像Web站点、直接域名泛域名
  • 原文地址:https://www.cnblogs.com/chenss15060100790/p/11199848.html
Copyright © 2011-2022 走看看