这次给大家带来vue2+kendo的ui整合,使用vue2+kendo的ui整合的注意事项有哪些,下面就是实战案例,一起来看一下。
/*
*  common.js
*///配置区kendo.culture("zh-cn");//中文显示const defaultgridoptions = { 
    sortable: true,    groupable: false,    selectable: true,    editable: false,    resizable: true,    reorderable: true,    pageable: {        refresh: true,        pagesize: 20,        pagesizes: [20, 50, 100, 200]
    }
}; //表格默认配置--用于配置复用//函数区function getcontainerh() { //获取表内容主体(包含头部标题与底部分页栏)高度
    var nbar = $(".nav-bar");//<=====我这里定义的是搜索栏
    var outerheight = 0;
    $(".nav-bar").each(function(i, v) {
        outerheight += $(v).outerheight();
    });    return window.innerheight - outerheight - 1;
}function resizegrid(containerheight) { //设置表内容高度
    containerheight = (containerheight == undefined ? getcontainerh() : containerheight);
    $('.k-grid.dynamicheight,.dynamic-height.k-grid').each(function() {        var grid = $(this),
            h1 = grid.find('div.k-grid-toolbar').outerheight() || 0,
            h2 = grid.find('div.k-grouping-header').outerheight() || 0,
            h3 = grid.find('div.k-grid-header').outerheight() || 0,
            h4 = grid.find('div.k-grid-pager').outerheight() || 0,
            ch = containerheight - 2 - h1 - h2 - h3 - h4; 
        if(ch > 0) {
            grid.find('div.k-grid-content').css('maxheight', ch + 'px');
            grid.find('div.k-grid-content-locked').css('maxheight', ch + 'px');
        } 
    });
}function getdatasourceconfig(idfield, readurl, filter) { //表格配置初始化
    return {        schema: {            model: {                id: idfield
            },            data: function(response) {                return response.data || response;
            },            total: 'total'
        },        transport: {            parametermap: function(options) {                return kendo.stringify(options);
            },            read: gettransport(readurl)
        },        pagesize: 20,        serverpaging: true,        serverfiltering: true,        serversorting: true,        filter: filter,        selectable: "row"
    };
}function getdatasource(idfield, readurl, filter) { //创建绑定数据
    return new kendo.data.datasource(getdatasourceconfig(idfield, readurl, filter));
}function gettransport(url, type, datatype, contenttype) {//数据源地址配置---可用于表格以外kendo ui组件配置 
    return {        contenttype: contenttype || 'application/json',        datatype: datatype || 'json',        type: type || 'post',        async: false,        url: url
    };
}function togridfilter(o) { //转为表 filter 对象
    var filter = {        logic: o.logic || "and",        filters: []
    };    for(var i in o) {        var m = o[i];        if(i === "logic") {            continue;
        }        if($.trim(m) && (typeof m === "string" || typeof m === "number")) {
            filter.filters.push({                field: i,                value: $.trim(m),                operator: "eq"
            });
        } else if(typeof m === "object" && $.trim(m.value)) {            if(m.operator === "in") {                var value = m.value.split("/");
                filter.filters.push({                    field: i,                    value: value,                    operator: m.operator || "in"
                });
            } else {
                filter.filters.push({                    field: i,                    value: $.trim(m.value),                    operator: m.operator || "eq"
                });
            }
        } else if(typeof m === "object" && m.type === "range") {            if(m.start) filter.filters.push({                field: i,                value: m.start,                operator: "gte"
            });            if(m.end) {
                filter.filters.push({                    field: i,                    value: m.end,                    operator: "lte"
                });
            }
        }
    }    return filter;
}//......以下是根据自己的项目进行配置
2.页面
<!doctype html><html>
    <head>
        <meta charset="utf-8">
        <title>demo</title> 
        <head>
            <meta charset="utf-8">
            <title></title>
            <!--以下地址应用根据实际情况使用-->
            <link href="../plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet">
            <link href="../plugins/kendoui/styles/kendo.common-material.min.css" rel="stylesheet">
            <link href="../plugins/kendoui/styles/kendo.material.min.css" rel="stylesheet">
            <script src="../public/js/vue.min.2.1.10.js"></script>
            <script src="../public/js/jquery.3.1.1.min.js"></script>
            <script src="../plugins/kendoui/js/kendo.all.min.js"></script>
            <script src="../plugins/kendoui/js/cultures/kendo.culture.zh-cn.min.js"></script>
            <link href="../public/css/main_layout.css" rel="stylesheet" data-info="这个css是对全局页面样式的覆盖重写">
            <script src="./common.js"></script>
        </head>
    </head>
    <body>
        <div id="app">
            <!--搜索栏+按钮栏-->
            <div class="nav-bar">
                <div class="btn-group">
                    <button type="button" data-target="#modal_theme_primary" class="btn btn-default" @click="addpage()"><i class="icon-plus2"></i>新增</button>
                    <button type="button" class="btn btn-default" @click="del()"><i class="icon-cross2"></i>删除</button>
                </div>
                <div class="input-group" style="float: right;">
                    <input type="text" class="form-control" v-model="search.searchtext">
                    <div class="input-group-btn">
                        <button type="button" class="btn btn-default" aria-label="help" @click="search.searchtext=''"><span class="icon-rotate-cw3"></span></button>
                        <button type="button" class="btn btn-default" @click="onsearch"><i class="icon-search4"></i>搜索</button>
                    </div>
                </div>
            </div>
            <!--主体-->
            <div id="main-content">
                <div class="grid-wrapper">
                    <!--kendo grid-->
                    <div id="griduser" class="dynamic-height"></div>
                </div>
            </div>
        </div>
        <script>
            /*
             *object.assign(obj1,obj3,obj3,...) 用来对象合并 这里讲两个配置合并 
             */
            var gridoptions2 = object.assign(defaultgridoptions, {                datasource: {},//初始化空数据源对象
                columns: [{//列头配置-详情请转
                    field: "rownumber",                    title: " ",                    template: (dataitem) => app.datasource.data().indexof(dataitem) + 1,//<===计算表行序号并显示出来
                    width: 45
                }, {                    title: "用户名",//绑定的id
                    field: "username",//绑定的文字 
                    template: "<a  title='修改'  onclick=\"app.addpage('create?userid=#= userid #')\" >#= username# </a>",//自定义显示模板
                    width: 200
                }, {                    title: "姓名",                    field: "fname",                    width: 200
                }, {                    title: "邮箱",                    field: "email",                    width: 200
                }, {                    title: "工号",                    field: "number",                    width: 200
                }/**略**/],                selectable: "multiple"//多选----可选值row cell;multiple, row ;multiple cell
            });            var app = new vue({                el: "#app",                data: {                    search: {                        searchtext: "搜索文字",
                    },                    grid: null, //kendo grid对象
                    gridoptions: gridoptions2, //kendo grid对象配置
                    datasource: {} //kendo grid对象数据源
                },                methods: {                    reload: function() {//初始化grid 
                        this.gridoptions.datasource = this.datasource = getdatasource("roleid", "./测试数据.json");                        this.grid = $("#griduser").kendogrid(this.gridoptions);
                        resizegrid();
                    },                    addpage: function() {//<====添加页面与修改页面是共用的
                        alert("弹出添加页面遮罩层");
                    },                    del: function() {                        var tmpgrid = this.grid.data("kendogrid");                        var selectedids = [];//对象id集合
                        var rows = tmpgrid.select(); //获取表格选中行
                        if(!rows.length > 0) {
                            alert("请选择");                            return;
                        } 
                        if(!confirm("确定要删除吗?")) return; 
                        rows.each(function(i, row) {                            var dataitem = tmpgrid.dataitem(row);                            if(dataitem) {
                                selectedids.push(dataitem.userid);
                            }
                        });
                        $.ajax({                            type: "post",                            url: "/删除地址",                            data: selectedids,                            success: function(data) {                                /***成功 **/ 
                            },                            error: function() {                                /***错误**/
                            }
                        });
                    },                    onsearch: function() {                        console.log("搜索", this.search, " ", togridfilter(this.search));
                        app.gridoptions.datasource.filter(togridfilter(this.search)); //
                    }
                }
            });
            $(window).resize(function() {//表高度自适应
                resizegrid();
            });
            app.reload();        </script>
    </body> </html>
3.测试数据格式
/**
*测试数据.json
*/{    "total": 40,//总数
    "data": [//返回的当前数据
         {            "userid": "uuid",            "username": "zhangshan",            "password": "123456",            "email": "zhangshan@xx.xxx", 
            "number": "xxx001",            "fname": "张三"
        } 
             //.......
    ] 
}
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
相关阅读:
h5如何做图片上传预览组件
python3与js有什么不同
flv.js的使用详解
以上就是vue2+kendo的ui整合的详细内容。
   
 
   