• 了解fastadmin标准的控制器模块js的表格事件


    controller/A.php<-------------->public/assets/js/backend/a.js

    controller/b/A.php<-------------->public/assets/js/backend/b/a.js

    标准的控制器模块js

    <script src="/assets/js/require.js" data-main="/assets/js/require-backend.js?v=1551685919"></script>

    define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
    
        var Controller = {
            index: function () {
                // 初始化表格参数配置
                Table.api.init({
                    extend: {
                        index_url: 'category/index',
                        add_url: 'category/add',
                        edit_url: 'category/edit',
                        del_url: 'category/del',
                        multi_url: 'category/multi',
                        dragsort_url: '',
                        table: 'category',
                    }
                });
    
                var table = $("#table");
    
                // 初始化表格
                table.bootstrapTable({
                    url: $.fn.bootstrapTable.defaults.extend.index_url,
                    escape: false,
                    pk: 'id',
                    sortName: 'weigh',
                    pagination: false,
                    commonSearch: false,
                    columns: [
                        [
                            {checkbox: true},
                            {field: 'id', title: __('Id')},
                            {field: 'type', title: __('Type')},
                            {field: 'name', title: __('Name'), align: 'left'},
                            {field: 'nickname', title: __('Nickname')},
                            {field: 'flag', title: __('Flag'), operate: false, formatter: Table.api.formatter.flag},
                            {field: 'image', title: __('Image'), operate: false, formatter: Table.api.formatter.image},
                            {field: 'weigh', title: __('Weigh')},
                            {field: 'status', title: __('Status'), operate: false, formatter: Table.api.formatter.status},
                            {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
                        ]
                    ]
                });
    
                // 为表格绑定事件
                Table.api.bindevent(table);
            },
            add: function () {
                Controller.api.bindevent();
            },
            edit: function () {
                Controller.api.bindevent();
            },
            api: {
                bindevent: function () {
                    Form.api.bindevent($("form[role=form]"));
                }
            }
        };
        return Controller;
    });
    View Code

    每一个控制器请求的方法对应JS模块中一个方法 

    js中有定义一个Controller 对象,它有index/add/edit/api四个方法,这四个方法分别与我们控制器中的方法一一对应

    如果我们在js中添加了自己的方法,如detail方法,则对应添加Controller下的对应控制器文件下的detail方法

    在public/assets/js/backend/a.js用define()定义了a模块

    加载用require(['a'], function (a){...}

    我们在require配置文件/assets/js/require-backend.js中找到

    //加载相应模块
    if (Config.jsname) {
        require([Config.jsname], function (Controller) {
            Controller[Config.actionname] != undefined && Controller[Config.actionname]();
        }, function (e) {
            console.error(e);
            // 这里可捕获模块加载的错误
        });
    }
    参数Config.jsname即为自定义的模块名(js文件),格式为:backend/a ;
    Config.actionname为你在js模块定义的一个Controller对象的属性,属性有index/add/edit/api四个方法(对象),这四个方法分别与我们控制器中的方法一一对应
    分别执行了模块js的idnex、add、edit、api这四个对象属性
    Controller.index:
    index 调用的是Table.api.bindevent(table); 即调用的是require-table.js里的Table对象
    上面这个table有什么对象呀,事件有哪些呢
    Table.list                 //已经渲染的表格对象
    Table.defaults             Bootstrap-table表格默认列的配置
    Table.columnDefaults       bootstraptable  column的默认参数
    Table.config               表格相关DOM元素类配置 如定义的button等选择器
    Table.api.init(Table.defaults, Table.columnDefaults, locales)      初始化table 在这自定义修改表的前两个默认参数
    Table.api.bindevent(table)  //绑定事件
    Table.api.multi(action, ids, table, element)   // 批量操作请求
    Table.api.events          //单元格元素事件
    Table.api.formatter       //单元格数据格式化
    > `Table.api.formatter.icon` 快速将字段渲染成一个按钮,仅支持Fontawesome按钮
    > `Table.api.formatter.image` 快速将字段渲染成图片展示的形式
    > `Table.api.formatter.images` 快速将字段渲染成多图片展示的形式,字段数据请以`,`进行分隔
    > `Table.api.formatter.status` 快速将字段渲染成状态,默认`normal/hidden/deleted/locked`这四个状态
    > `Table.api.formatter.url` 快速将字段渲染成URL框
    > `Table.api.formatter.search` 快速将字段渲染成可搜索的链接,点击后将执行搜索
    > `Table.api.formatter.addtabs` 快速将字段渲染成可添加到选项卡的链接,点击后将把链接添加到选项卡
    > `Table.api.formatter.flag` 快速将字段渲染成标志,仅支持`index/hot/recommend/new`这四种标志
    > `Table.api.formatter.label` 快速将字段渲染Label标签
    > `Table.api.formatter.datetime` 快速时间戳数据渲染成日期时间数据
    > `Table.api.formatter.operate` 操作栏固定按钮
    > `Table.api.formatter.buttons` 快速生成多个按钮
    > `Table.api.formatter.toggle` 快速生成切换按钮
    Table.api.buttonlink(column, buttons, value, row, index, type) //生成button样式的链接 
    Table.api.replaceurl(url, row, table) //替换URL中的数据({变量名})
    Table.api.selectedids(table) // 获取选中的条目ID集合
    Table.api.toggleattr(table)  // 切换复选框状态    
    Table.api.getrowdata(table, index) //根据行索引获取行数据
    Table.api.getrowbyindex(table, index)// 根据行索引获取行数据
    Table.api.getrowbyid(table, id) // 根据主键ID获取行数据

    Table主要功能

    load-error.bs.table  当远程数据被加载出错后触发   
    refresh.bs.table      当点击刷新按钮对表格进行刷新时触发 在.btn-refresh .fa的元素上添加一个fa-spin的类,转圈的图标。。。
    dbl-click-row.bs.table  当双击单元格时  向.btn-edit元素传递一个click事件
    post-body.bs.table     当内容渲染完成后  移除.fa-spin  向.btn-disabled类元素添加disabled属性禁止交互、不是卡片视图的的type是checkebox的td的data-index属性大于0 时拖拽选择需要重新绑定事件
    check.bs.table uncheck.bs.table check-all.bs.table uncheck-all.bs.table  选中一行。取消选中一行全选框选中全选框取消时.btn-disabled类元素disabled状态的切换
    绑定panel-heading类的tab事件
    .toolbar .btn-refresh下的刷新按钮事件
    .toolbar .btn-add下的添加按钮事件
    .toolbar .btn-import下的导入按钮事件
    .toolbar .btn-edit下的编辑按钮事件
    .toolbar .btn-multi批量操作按钮事件
    .toolbar btn-del批量删除按钮事件
    绑定拖动排序
    input[data-id][name='checkbox']点击事件
    [data-id].btn-change点击事件
    [data-id].btn-edit点击事件
    [data-id].btn-del
    批量操作请求
    单元格元素事件 click .btn-editone和click .btn-delone
    单元格数据格式化
    View Code

    按钮显示: 

    这里的默认几个自定义的按钮或者自己在添加的直接在view模板里写注意类名要对应上;

    fastadmin给默认的按钮都指定了类别如下:

    Table.config.firsttd: 'tbody tr td:first-child:not(:has(div.card-views))',//不是卡片视图的的哥td(即checkebox那列)
    Table.config.toolbar: '.toolbar',//包裹下面这几个自定义表格按钮的盒子
    Table.config.refreshbtn: '.btn-refresh',//刷新
    Table.config.addbtn: '.btn-add',//增加
    Table.config.editbtn: '.btn-edit',//编辑
    Table.config.delbtn: '.btn-del',//删除
    Table.config.importbtn: '.btn-import',//导入
    Table.config.multibtn: '.btn-multi',//批量更新
    Table.config.disabledbtn: '.btn-disabled',
    Table.config.editonebtn: '.btn-editone',//操作里的删除
    Table.config.dragsortfield: 'weigh'

    事件:

    点击刷新    触发 .toolbar Table.config.refreshbtn的click事件

    点击添加    触发 .toolbar Table.config.addbtn点击事件

    点加导入:触发 Table.config.importbtn  点加事件

    点击批量编辑按钮(螺母形状):触发 .toolbar Table.config.editbtn 点击事件

    点击删除:触发 .toolbar Table.config.delbtn 点击事件

    表格默认button:输出和禁用默认button

                // 初始化表格参数配置
                Table.api.init({
                    extend: {
                        index_url: 'weixinitem/config/index',
                        add_url: 'weixinitem/config/add',
                        edit_url: 'weixinitem/config/edit',//默认为空则不生成
                        del_url: 'weixinitem/config/del',//默认为空则不生成
                        dragsort_ur:'',//为空则不生成
                        multi_url: 'weixinitem/config/multi',
                        table: 'weixinitem_config',
                    }
                });
    拖拽图标的话、在数据库不用建默认的weigh字段或者responseHandler里修改row的field字段名、或者修改require_table.js里的Table.config里的dragsortfield的值
    
    重点说下拖拽的图标显示我们需要后台传过来的字段名(传过来前可随意组装)与table表field的值相同且与Table.config.dragsortfield的值相同且与Table.defaults.extend.dragsort_url有值

    事件:

    拖拽事件require(['dragsort'], function () {})

    编辑:触发.btn-editone点击事件 Table.api.events.operate

     删除:触发btn-delone的点击事件Table.api.events.operate

     ps

    表单的生成

    fastadmin form表单组件(每个表单元素的生成)

    <form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('文本框')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::text('row[text]', '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('多行文本框')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::textarea('row[textarea]', '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('富文本编辑器')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::editor('row[editor]', '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('单选')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::radios('row[radio]', ['aa'=>'AA', 'bb'=>'BB'], 'aa', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('复选')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::checkboxs('row[checkbox]', ['aa'=>'AA', 'bb'=>'BB'], 'aa', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('下拉列表')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::select('row[select]', ['aa'=>'AA', 'bb'=>'BB'], 'aa', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('下拉列表(多选)')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::selects('row[select]', ['aa'=>'AA', 'bb'=>'BB'], 'aa', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('下拉列表(友好)')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::selectpicker('row[selectpicker]', ['aa'=>'AA', 'bb'=>'BB'], 'aa', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('下拉列表(友好)(多选)')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::selectpickers('row[selectpickers]', ['aa'=>'AA', 'bb'=>'BB'], 'aa', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('动态下拉列表')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::selectpage('row[select]', 2, 'category/selectpage', null, null, ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('动态下拉列表(多选)')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::selectpages('row[select]', 2, 'category/selectpage', null, null, ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('城市选择框')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::citypicker('row[citypicker]', 2, ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('日期')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::datepicker('row[datepicker]', '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('时间')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::timepicker('row[timepicker]', '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('日期时间')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::datetimepicker('row[timepicker]', '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('日期区间')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::daterange('row[daterange]', '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('时间区间')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::timerange('row[timerange]', '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('日期时间区间')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::datetimerange('row[datetimerange]', '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('动态字段列表')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::fieldlist('row[fieldlist]', ['aa'=>'AA', 'bb'=>'BB'], null, '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('单图')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::image('row[image]', '/uploads/20180629/b83227ea668e7b2d61def9812bbce3da.png', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('多图')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::images('row[images]', '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('单文件')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::upload('row[upload]', '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('多文件')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::uploads('row[uploads]', '', ['data-rule'=>'required'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('开关')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::switcher('row[switcher1]', '0', ['color'=>'success'])}
                                    {:Form::switcher('row[switcher2]', '1', ['color'=>'yellow', 'disabled'=>true])}
                                    {:Form::switcher('row[switcher3]', 'Y', ['color'=>'navy', 'yes'=>'Y', 'no'=>'N'])}
                                    {:Form::switcher('row[switcher4]', '1', ['color'=>'info'])}
                                    {:Form::switcher('row[switcher4]', '1', ['color'=>'danger', 'disabled'])}
                                </div>
                            </div>
    
                            <div class="form-group">
                                <label class="control-label col-xs-12 col-sm-2">{:__('联动选择')}:</label>
                                <div class="col-xs-12 col-sm-8">
                                    {:Form::cxselect('ajax/area', ['province','city'], ['province'=>37, 'city'=>38])}
                                </div>
                            </div>
    
                            <div class="form-group layer-footer">
                                <label class="control-label col-xs-12 col-sm-2"></label>
                                <div class="col-xs-12 col-sm-8">
                                    <button type="submit" class="btn btn-success btn-embossed disabled">{:__('Submit')}</button>
                                    <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
                                </div>
                            </div>
                        </form>
    View Code

    注意:必须还要在js中用Form.api.bindevent("form[role=form]");进行组件初始化,否则部分组件会不生效。

  • 相关阅读:
    阅读prettytable 一些代码、get、set 检查参数
    python 库 PrettyTabble 使用与错误
    python 内建模块与第三方模块
    python 排序 堆排序
    python 排序 桶排序
    python 排序冒泡排序与双向冒泡排序
    python 函数式编程 闭包,返回一个函数
    python 排序 选择排序
    python 排序 归并排序
    python 排序 插入排序与希尔排序
  • 原文地址:https://www.cnblogs.com/lichihua/p/10470995.html
Copyright © 2020-2023  润新知