最近在看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);
就可以显示了。。。。。