zoukankan      html  css  js  c++  java
  • easyui plugin——etreegrid:CRUD Treegrid

    昨天写了一个ko+easyui的同样的实现,感觉写的太乱,用起来十分麻烦,于是今天照着edatagrid,写了一个etreegrid,这样再用ko绑定就方便多了。

    使用很简单,$(tableId).etreegrid({idField:''parentIdField:'',treeField:'',saveUrl:'',deleteUrl:''});

    还支持一些事件,onSave,onBeforeSave,onEdit,onAdd,onRemove;

    Url可以不指定,指定Data即可。  

    /**
     * etreegrid - jQuery EasyUI
     * 
     * Licensed under the GPL:
     *   http://www.gnu.org/licenses/gpl.txt
     *
     * Copyright 2013 maddemon [ zhengliangjun@gmail.com ] 
     * 
     * Dependencies:
     *   treegrid
     *   messager
     * 
     */
    (function ($) {
    
        function buildGrid(target) {
            var opts = $.data(target, 'etreegrid').options;
            $(target).treegrid($.extend({}, opts, {
                onDblClickCell: function (field, row) {
                    if (opts.editing) {
                        $(this).etreegrid("editRow", row);
                        focusEditor(field);
                    }
                },
                onClickCell: function (field, row) {
                    if (opts.editId >= 0) {
                        if (!trySaveRow()) {
                            focusEditor(field);
                            return;
                        }
                    }
                },
                onAfterEdit: function (row, changes) {
                    //opts.editId = undefined;
                    var url = row.isNewRecord ? opts.saveUrl : opts.updateUrl || opts.saveUrl;
                    if (url) {
                        $.post(url, row).done(function (json, statusText, xhr) {
                            if (opts.editId === 0) {
                                json = eval("(" + json + ")");//注意这个地方,接口返回的数据的格式,可以根据自己的情况修改
                                $(target).treegrid("remove", opts.editId);
                                var data = json.data;
                                //console.log(data);
                                $(target).treegrid("append", { parent: data[opts.parentIdField], data: [data] });
                            } else {
                                //refresh
                                $(target).treegrid("refresh", row[opts.idField]);
                            }
                            opts.editId = undefined;
                        }).error(function (xhr) {
                            var result = eval("(" + xhr.responseText + ")");
                            $.messager.alert("失败", result.message || result, "warning");
                        });
                        opts.onSave.call(target, row);
                    } else {
                        opts.onSave.call(target, row);
                    }
                    if (opts.onAfterEdit) opts.onAfterEdit.call(target, row);
                },
                onCancelEdit: function (row) {
                    opts.editId = undefined;
                    if (row.isNewRecord) {
                        $(this).treegrid("remove", row[opts.idField]);
                    }
                    if (opts.onCancelEdit) opts.onCancelEdit.call(target, row);
                },
                onBeforeLoad: function (row, param) {
                    if (opts.onBeforeLoad.call(target, row, param) == false) {
                        return false;
                    };
                    $(this).treegrid("rejectChanges");
                }
            }));
    
            function trySaveRow() {
                if (!$(target).treegrid("validateRow", opts.editId)) {
                    $(target).treegrid("select", opts.editId);
                    return false;
                }
                if (opts.onBeforeSave.call(this, opts.editId) == false) {
                    setTimeout(function () {
                        $(target).treegrid('select', opts.editId);
                    }, 0);
                    return false;
                }
                $(target).treegrid('endEdit', opts.editId);
                return true;
            }
    
            function focusEditor(field) {
                var editor = $(target).treegrid('getEditor', { id: opts.editId, field: field });
                if (editor) {
                    editor.target.focus();
                } else {
                    var editors = $(target).treegrid('getEditors', opts.editId);
                    if (editors.length) {
                        editors[0].target.focus();
                    }
                }
            }
        }
    
        $.fn.etreegrid = function (options, param) {
            if (typeof (options) == "string") {
                var method = $.fn.etreegrid.methods[options];
                if (method) {
                    return method(this, param);
                } else {
                    return this.treegrid(options, param);
                }
            }
    
            options = options || {};
            return this.each(function () {
                var state = $.data(this, "etreegrid");
                if (state) {
                    $.extend(state.options, options);
                } else {
                    $.data(this, "etreegrid", { options: $.extend({}, $.fn.etreegrid.defaults, $.fn.etreegrid.parseOptions(this), options) });
                }
                ;
                buildGrid(this);
    
            });
        };
    
        $.fn.etreegrid.parseOptions = function (target) {
            return $.extend({}, $.fn.treegrid.parseOptions(target), {});
        };
    
        $.fn.etreegrid.methods = {
            options: function (jq) {
                var opts = $.data(jq[0], "etreegrid").options;
                return opts;
            },
            enableEditing: function (jq) {
                return jq.each(function () {
                    var opts = $.data(this, "etreegrid").options;
                    opts.editing = true;
                });
            },
            disableEditing: function (jq) {
                return jq.each(function () {
                    var opts = $.data(this, "etreegrid").options;
                    opts.editing = false;
                });
            },
            editRow: function (jq, row) {
                return jq.each(function () {
                    var dg = $(this);
                    var opts = $.data(this, "etreegrid").options;
                    var rowId = row[opts.idField];
                    var editId = opts.editId;
                    if (editId != rowId) {
                        if (dg.treegrid("validateRow", editId)) {
                            if (editId >= 0) {
                                if (opts.onBeforeSave.call(this, editId) == false) {
                                    setTimeout(function () {
                                        dg.treegrid("select", editId);
                                    }, 0);
                                    return;
                                }
                            }
                            dg.treegrid("endEdit", editId);
                            dg.treegrid("beginEdit", rowId);
                            opts.editId = rowId;
                            var node = dg.treegrid("find", rowId);
                            opts.onEdit.call(this, node);
                        } else {
                            setTimeout(function () {
                                dg.treegrid("select", editId);
                            }, 0);
                        }
                    }
                });
            },
            addRow: function (jq) {
                return jq.each(function () {
                    var dg = $(this);
                    var opts = $.data(this, "etreegrid").options;
                    var editId = opts.editId;
                    if (opts.editId >= 0) {
                        if (!dg.treegrid("validateRow", editId)) {
                            dg.treegrid("select", editId);
                            return;
                        }
                        if (opts.onBeforeSave.call(this, opts.editId) == false) {
                            setTimeout(function () {
                                dg.treegrid('select', opts.editId);
                            }, 0);
                            return;
                        }
                        dg.treegrid('endEdit', opts.editId);
                    } else {
                        var selected = dg.treegrid("getSelected");
                        var parentId = selected ? selected[opts.idField] : 0;
                        var newRecord = {};
                        newRecord[opts.idField] = 0;
                        newRecord[opts.parentIdField] = parentId;
                        console.log(newRecord)
                        dg.treegrid("append", { parent: parentId, data: [newRecord] });
                        if (parentId > 0) {
                            var children = dg.treegrid("getChildren");
                        }
                        opts.editId = 0;
                        dg.treegrid("beginEdit", opts.editId);
                        dg.treegrid("select", opts.editId);
    
                    }
                });
            },
            saveRow: function (jq) {
                return jq.each(function () {
                    var dg = $(this);
                    var opts = $.data(this, 'etreegrid').options;
                    if (opts.editId >= 0) {
                        if (!dg.treegrid("validateRow", opts.editId)) {
                            dg.treegrid("select", opts.editId);
                            return;
                        }
                        if (opts.onBeforeSave.call(this, opts.editId) == false) {
                            setTimeout(function () {
                                dg.treegrid('select', opts.editId);
                            }, 0);
                            return;
                        }
                        $(this).treegrid('endEdit', opts.editId);
                    }
                });
            },
            cancelRow: function (jq) {
                return jq.each(function () {
                    var rowId = $(this).etreegrid('options').editId;
                    $(this).treegrid('cancelEdit', rowId);
                });
            },
            removeRow: function (jq) {
                return jq.each(function () {
                    var dg = $(this);
                    var opts = $.data(this, 'etreegrid').options;
                    var row = dg.treegrid('getSelected');
                    if (!row) return;
                    if (row.isNewRecord) {
                        dg.treegrid("remove", row[opts.idField]);
                        return;
                    }
                    $.messager.confirm("确认", "确认删除这条数据吗?", function (r) {
                        if (!r) return;
                        var idValue = row[opts.idField];
                        if (opts.deleteUrl) {
                            $.post(opts.deleteUrl, { id: idValue }).done(function (json) {
                                dg.treegrid("remove", idValue);
                                opts.onRemove.call(dg[0], json, row);
                            }).error(function (xhr) {
                                var json = eval('(' + xhr.responseText + ')');
                                $.messager.alert('错误', json.message || json, "warning");
                            });
                        } else {
                            dg.datagrid('cancelEdit', idValue);
                            dg.datagrid('deleteRow', idValue);
                            opts.onRemove.call(dg[0], row);
                        }
                    });
                });
            }
        };
    
        $.fn.etreegrid.defaults = $.extend({}, $.fn.treegrid.defaults, {
            editing: true,
            editId: undefined,
            messager: {},
    
            url: null,
            saveUrl: null,
            updateUrl: null,
            deleteUrl: null,
    
            onAdd: function (row) { },
            onEdit: function (row) { },
            onBeforeSave: function (index) { },
            onSave: function (row) { },
            onRemove: function (row) { },
        });
    })(jQuery);
    

      

      

  • 相关阅读:
    shell if 条件语句实践
    shell函数
    透视财富增长的秘密
    kvm虚拟化实践
    Linux驱动编程--基于I2C子系统的I2C驱动
    Makefile中=、:=、+=、?=的区别
    字符设备驱动结构与开发
    驱动分类
    为什么ARM的frq中断的处理速度比较快
    Linux设备驱动01
  • 原文地址:https://www.cnblogs.com/mad/p/jquery_easyui_etreegrid.html
Copyright © 2011-2022 走看看