标记一下关于fastadmin在列表页获取视频时长并且AJAX提交到后端正常显示的过程

Posted baker95935

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标记一下关于fastadmin在列表页获取视频时长并且AJAX提交到后端正常显示的过程相关的知识,希望对你有一定的参考价值。

尝试了2次,因为这个问题对fastadmin列表的很多功能 更加熟悉

先看下目标的效果

 

 

就是点击这个数字  然后获取当前视频的时长 然后 存到库里面 更新数据

之前的思路是 想在数据加载完毕的时候自动获取,也是可以的,只是我觉得这个思路比就麻烦

 那么开始我的流程

1 添加视频时长这个字段 的属性  我把整个的JS发下来 标注下

define([\'jquery\', \'bootstrap\', \'backend\', \'table\', \'form\'], function ($, undefined, Backend, Table, Form) {

    var Controller = {
        index: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: \'course/index\' + location.search,
                    add_url: \'course/add\',
                    edit_url: \'course/edit\',
                    del_url: \'course/del\',
                    multi_url: \'course/multi\',
                    table: \'course\',
                }
            });

            var table = $("#table");

            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                pk: \'id\',
                sortName: \'id\',
                columns: [
                    [
                        {checkbox: true},
                        {field: \'id\', title: __(\'Id\')},
                        {field: \'course_name\', title: __(\'Coursename\')},
                        {field: \'chapter_id\', title: __(\'Chapter\')},
                        {
                            field: \'browser\',
                            title: __(\'Course_time\'),
                            operate: false,
                            events: Controller.api.events.browser,
                            formatter: Controller.api.formatter.browser
                        },
                        {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]"));
            },
            formatter: {//渲染的方法
                browser: function (value, row, index) {
                    return  "<video width=\'1px\' height=\'1px\' id=\'video_"+row.id+"\' controls=\'controls\'><source src=\'"+row.course_video+"\'  type=\'video/mp4\'></video>"+\'<a class="btn btn-xs btn-browser">\'+row.course_time+\'</a>\';
                },
            },
            events: {//绑定事件的方法
                browser: {
                    \'click .btn-browser\': function (e, value, row, index) {
                        myVid=document.getElementById("video_"+row.id);
                        var course_time=parseInt(myVid.duration);
                        $.ajax({
                            url: \'/admin.php/course/getvideotime\',
                            type: \'post\',
                            data:{course_time:course_time,id:row.id},
                            dataType: \'json\',
                            success: function (ret) {
                                if(ret.res==1) {
                                    Layer.alert(ret.msg);
                                }
                                $("#table").bootstrapTable(\'refresh\');
                            }
                        });
                    }
                },
            }
 
        },
  
    };
    return Controller;
});

 

2 控制器里面的代码比较简单 说白了就是接受数据 然后更新

    public function getvideotime()
    {
        if ($this->request->isAjax()) {
             $course_time=$this->request->post(\'course_time\');
             $id=$this->request->post(\'id\');
         
             $data[\'course_time\']=$course_time;
             db(\'online_course\')->where(\'id=\'.$id)->update($data);
             
             $result = array("res" => 1, "msg" => \'操作成功\');
 
             return json($result);
        }
    }

 

知道了几个点 

1 js文件里面的 index:  add: edit: 分别代表 index.html add.html edit.html对应的页面

2 formatter 是渲染事件 说白了就是显示效果

3 events: Controller.api.events.browser,   可针对一个filed加单独的触发事件

以上是关于标记一下关于fastadmin在列表页获取视频时长并且AJAX提交到后端正常显示的过程的主要内容,如果未能解决你的问题,请参考以下文章

FastAdmin 关于列表渲染文字过长导致页面难以管理的问题

fastadmin修改表的注释后怎样修改列表栏的名称

fastadmin列表页 修改 正序排列 倒序排列 desc asc

fastadmin的selectpage没有分页

RTSP/Onvif协议视频平台EasyNVR如何配置用户的视频流播放时长?

有啥方法可以在上传之前获取视频时长吗?