发表于: 2017-07-27 00:22:14
1 894
今天完成的事情
- 1.改修真院bug
- 2.改学渣乐园富文本编辑器bug
明天计划的事情
1准备回家学习的项目
2 改bug
遇到的问题
- 百度富文本编辑器有一个bug, 当输入的内容结尾为?或者其他需要使用
shift
键一起按才能打出来的符号时,这些符号并不会自动同步到model上。花了大量的时间排查后发现输入?等其他标点符号时,不会触发umeditor封装的contentchange事件。找到原因后开始解决这个问题。首先看是不是插件的问题,换了官网的插件,没有作用,图图师兄说回家学习的是好的,然后去看回家学习的,发现引用的方式不一样,学渣的是封装好的自定义指令,回家学习的是直接调的umeditor的api,然后现在2种思路,一种是调用api,在提交的时候手动的获取内容再传给后端。另外一种是直接去改自定义指令。先试第一种方法,发现出现了一些莫名其妙的bug,换第二种思路,去看自定义指令吧。嗯,虽然我研究过一段时间的自定义指令,不过这写的都是啥?//重载ngModel的$render方法
ngModel.$render = function () {
if (ctrl.initialized) {
/**
* 重载ngModel的$render方法
*/
ctrl.editorInstance.setContent(ngModel.$viewValue || '');
ctrl.checkPlaceholder();
}
};
//重载ngModel的isEmpty方法
ngModel.$isEmpty = function (value) {
if (!value) {
return true;
}
if (ctrl.initialized) {
return !ctrl.editorInstance.hasContents();
}
};
- 没办法,硬着头皮看吧,这段代码应该是初始化,这段代码应该是数据同步,这段代码应该是事件监听。等等,既然有事件监听,那我在监听事件里面加一个数据同步不就好了,再看一下数据同步怎么写,欸,这里好像有一个已经封装好的方法,那么就试试吧:
//监听多个事件
ctrl.initListener = function () {
ctrl.editorInstance.addListener('contentChange', function () {
scope.$evalAsync(ctrl.updateModelView);
});
ctrl.editorInstance.addListener('focus', function () {
scope.$evalAsync(ctrl.updateModelView);
ctrl.focus = true;
ctrl.checkPlaceholder();
});
ctrl.editorInstance.addListener('blur', function () {
scope.$evalAsync(ctrl.updateModelView);
ctrl.focus = false;
ctrl.checkPlaceholder();
// $rootScope.check()
});
};
跑一下代码,成功。蒙对了,yeah!
收获
自定义指令是一个大坑
评论