• 研究doraCMS中遇到的知识点


    最近在看doraCMS,许多地方不清楚就百度了,在这里总结一下

    一、mongodb和redis的安装【win7,64位】

    mongodb:

    官网下载,安装完成后,在命令行下找到mongodb安装目录下的bin目录,运行

    mongod.exe --dbpath c:datadb

    ps:每次这样启动都超级麻烦,于是还是把他弄成windows服务吧

    mongod.exe --bind_ip yourIPadress --logpath "C:datadbConfmongodb.log" --logappend --dbpath "C:datadb" --port yourPortNumber --serviceName "YourServiceName" --serviceDisplayName "YourServiceName" --install

    必须要以管理员身份运行cmd,我没有log文件,所以直接新建了一个,其中service内容就是服务中第一列显示的名称。然后就搞定了。

    其中c盘的data文件是数据存放目录

    要进入后台管理shell就运行bin目录下的mongo.exe

    创建数据库

    use db_name;

    show dbs;

    show collections;

    db.collection_name.find();

    redis:

    github上有提供下载,然后打开64bit的目录,找到redis-server.exe就可以了,简单方便

    二、知识点

    1、arry.slice(begin,end)方法,将数组中的一部分浅复制到一个新的数组中,并返回这个新的数组

    2、a.indexOf(b)返回的是指定字符串b在字符a中首次出现的位置,首位为0

    3、populate(),mongodb的方法,类似join结果

    4、ng-disabled,angular的button标签中的属性,当满足条件时,按钮不可用,可用于“表单中属性没有填则提交按钮不可用”

    5、removeClass(),从被选的元素中移除一个或多个类,可用于“去除hidden隐藏选项”

    6、vaid,angular的一个属性,参考 详细解读AngularJS中的表单验证编程 

    7、res.locals.xxx,设置整站的全局变量,可将session中的信息放进去,res.locals.a=res.session.a;

     三、ztree 

    【有时间再写

    ztree awsome样式中,自定义的button的显示和隐藏在setting中的view属性中,如下这样就可以隐藏添加的按钮

    removeHoverDom: removeHoverDom

    function removeHoverDom(treeId, treeNode) {
    $("#addBtn_"+treeNode.tId).unbind().remove();
    $("#editBtn_"+treeNode.tId).unbind().remove();
    $("#delBtn_"+treeNode.tId).unbind().remove();

    };

    ng-minlength=""用来设置input的最短字符长度,但是突然不显示提示信息,改了下form的名称,把myForm改成myForm_add就解决了,应该是form多了之后名字有冲突

    bootstrap typeahead【因为业务需求需要在输入时完成自动补全,jQuery叫autocomplete,bootstrap有typeahead】

    页面正常输入

    <input type="text" class="form-control" id="add_user" name="add_user" ng-model="add_user" />

    js文件中添加如下代码

    $('#add_user').typeahead({
    source:get_user()

    });

    $('.tt-query').css('background-color','#fff');

    function get_user(){
    var user_list=[''];
    $.ajax({
    url: "/userlist",
    method: "GET",
    async: false,
    success: function (result) {
    if (result) {
    for(var i=0;i<result.length;i++){
    user_list.push(result[i].userName);
    }
    } else {
    console.log("未知异常,请稍后重试");
    }
    }
    })
    return user_list;

    }

    当然还要引入typeahead的相关js文件

    ztree expand【这个是导入数据之后节点太多了,ztree一次性全部加载会有点慢,于是想着弄成动态加载,开始只加载第一层父节点,每次点击父节点时,再加载它的子节点】

    但是这个的实现有点复杂,只加载第一层父节点的话,图标显示是子节点,于是只好在数据库中添加isParent属性,这样第一层就ok了,至少显示没问题

    接下来就用到ztree callback里的onExpand方法,当展开该节点treeNode时,去后台取它的子节点,然后添加到树中

    var childTree = changeToTreeJson(result);
    zTree.addNodes(treeNode, childTree, false);

    这样子节点就显示了,但还要注意一个问题,因为每次展开都会取子节点然后添加节点,会导致重复添加

    我之前百度也看到有人在折叠或者展开之前将子节点清空,试了下效果不好,然后发现只要在取节点之前加一个条件就可以了

    if(!treeNode.children) {

    取节点

    }

    搞定。

    然而并没有,因为加上isParent这个属性之后,当删除父节点时遇到问题,当它的子节点都删完后,因为它的isParent属性还是true,所以它的图标还是父节点的图标,删不掉。

    解决方法就是在删除子节点的时候,先得到下面的数

    zTree.getNodeByParam("id",treeNode.parentId).children.length

    有点绕,其实就是该节点的父节点的孩纸数目

    如果这个数目是1,那么当你删除该节点之后,就要把它的父节点isParent属性设置为false。

    这样的解决方法有点绕,但是暂时没想出其他的办法,有想过不加isParent属性,但是这样第一层显示时又要麻烦,所以麻烦总是避免不了的。

    ztree onRightClick【弄完onExpand才发现把右键忘记了】

    这个也是ztree callback里面的

    $("#rMenu ul").show();

    rMenu.css({"top": event.clientY + "px", "left": event.clientX + "px", "visibility": "visible"});

    $("body").bind("mousedown", onBodyMouseDown);

    function onBodyMouseDown(event){
    if (!(event.target.id == "rMenu" || $(event.target).parents("#rMenu").length>0)) {
    rMenu.css({"visibility" : "hidden"});
    }
    }

     function hideRMenu() {
    if (rMenu) rMenu.css({"visibility": "hidden"});
    $("body").unbind("mousedown", onBodyMouseDown);
    }

     其实很简单,只是配合上业务需求有点难度,不要忘记其他时候hideRMenu就可以。

    关于ztree还有一点,其实主要就是弄了棵树,所以算是研究了遍ztree

    zTree.selectNode(nodes[0]);

    selectNode,关键是显示选择哪个节点,默认可以是第一个,当页面跳转后,也可以通过这个使其选择跳转前选的那个节点,免得右边页面换了,左边的树不知道选谁。

    四、ueditor

    这个看似拿过来就可以用,然而问题还蛮多。。。

    之前用Angular,ueditor中用到数据绑定的时候,后台取出了数据,但编辑器中不显示内容,而且是我的机器正常,别人的机器不显示

    试着在ueditor指令配置的时候,加了一句

    ue.setContent(ngModel.$modelValue);

    就可以显示了。。。。。

  • 相关阅读:
    vuejs cli3 env配置文件实践指南
    Nginx的rewrite(地址重定向)剖析
    什么是TCP粘包?怎么解决这个问题
    windows bat批处理语法简析
    BAT文件语法和技巧(bat文件的编写及使用)
    Asyncio之EventLoop笔记
    python struct的使用例子
    redis慢查询笔记
    redis基础操作概念等笔记
    Python实现Dijkstra算法
  • 原文地址:https://www.cnblogs.com/lww930/p/5283553.html
Copyright © 2020-2023  润新知