整理一下1.2迭代中留言处的逻辑

通过三次的迭代,留言功能慢慢进化,从最开始的只能管理员留言到发标者可以回复,再到两种角色都可以删除自己的留言或者回复,随之功能逻辑也慢慢复杂起来。前两次迭代比较简单,第三次说需求的时候预想可能会有些麻烦,果不其然还是有些复杂的(因为我的逻辑思维比较慢)。然而,留言的存在时间并不长,在1.3的迭代中,就被砍掉了,还真是来也匆匆,去也匆匆,所以更要留下它的足迹了。

功能点有:

如果我是工程商:
1、我给客户留言了,并且未被标记已删除留言,那么我可以删除我的留言

如果我是发布招标者:
2、我可以回复工程商给我留的言,并且我可以删除我自己的回复(如果我已经回复过,则不能再回复第二次)(如果接口里返回的数据中)

Paste_Image.png

删除和回复的功能比较好做,对于我来说有难点的地方是逻辑判断该在什么时候下显示回复和删除按钮

实现:

1、工程商给客户留言了之后,是否显示删除按钮
//判断留言后面是否应该显示删除按钮
json.comments[i].show_del = (that.userId == json.comments[i].authorId && json.comments[i].disabled == 0) ? "show" : "hide";

show_del是在mustache里面的删除按钮上加了一个变量,当变量的等于show时,那么用css控制按钮显示,hide则为隐藏;
that.userId == json.comments[i].authorId 是指当登录的用户id等于评论的用户id。
json.comments[i].disabled == 0 是指当前的留言并没有被删除过(已经删除过就不能再被删除)

2、发标者给工程商回复时,后面是否显示删除按钮
//判断回复后面是否应该显示删除按钮
if((that.userId == json.comments[i].children[j].authorId) && (json.comments[i].children[j].disabled == 0)) {
     json.comments[i].children[j].show_del = "show";
}else {
     json.comments[i].children[j].show_del = "hide";
}

原理同1

3、当工程商给发标者留言后,在发标者查看标书时,显示回复按钮
var can_reply = false;
if(json.comments[i].children){
    // 先给true,如果后续遍历“回复”时发现已经有我回复过,那就再改为false
    can_reply = true;

    for(var j=0;j<json.comments[i].children.length;j++){
        var child = json.comments[i].children[j];

        // 如果是我的标,且我已回复过,那就不能再回复了
        if(is_my_demand && that.userId == json.comments[i].children[j].authorId){
            can_reply = false;
        }

        if(!is_my_demand){
            can_reply = false;
        }
    }
}else{
    // 当前登录用户就是发标的人,那就可以回复
    if(is_my_demand){
        can_reply = true;
    } else {
        can_reply = false;
    }
}

json.comments[i].show_reply = (can_reply ? "show" : "hide");

开始我觉得回复按钮实现起来应该比删除容易,没想到恰恰回复这里比较不好处理。

a、can_reply 为了方便判断,便设置了一个变量。当符合回复出现的条件的时候那么can_reply为true,反之为false
b、if(json.comments[i].children) 判断当有回复的时候,因为没有回复那么接口返回的数据中是没有children数据的,会造成下面的循环找不到这个字段而报错。
c、当进入if判断时就给can_reply一个true。是要保持,true为显示回复按钮,false为隐藏回复按钮,以免逻辑反着理解起来更加费劲
d、is_my_demand 为封装了一个函数,返回true代表登录的用户id和发标者的id是一致的
e、that.userId == json.comments[i].children[j].authorId 是指登录的用户id和发布回复者的id相等
f、 而d && e就代表如果是我的标,但是我回复过了,那就不能再回复了;并且如果有回复,但回复是管理员回复的,那么我依然还可以回复
g、 if(!is_my_demand) 代表如果我查看的不是我发的标,那我肯定不能回复
h、如果一个回复都没有时,还要判断如果我查看的是我发的标那就能回复,否则不能回复。

4、回复时的几种角色判断
//判断回复时的四种角色,authorType 为 1:客户;100:工程商;150:客户代表;200:万屏汇官方(平台代表)
switch(parseInt(child.authorType))
{
case 1:
    child.authorName = '客户回复';
    break;
case 100:
    child.authorName = '客户回复';
    break;
case 150:
    child.authorName = '客户代表回复';
    break;
case 200:
    child.authorName = '万屏汇官方回复';
    break;
}
5、是否显示回复或删除的完整代码
CON.prototype.rebuildJson = function(json){
    var that=this;

    // 这个标是我发布的吗?(发标人和当前登录用户id相同,则是我的)
    var is_my_demand = (this.userId == this.demanderId);

    for(var i=0;i<json.comments.length;i++){

        //给名片传值-user_id
        json.comments[i].user_id = json.comments[i].authorId;

        //判断留言后面是否应该显示删除按钮
        json.comments[i].show_del = (that.userId == json.comments[i].authorId && json.comments[i].disabled == 0) ? "show" : "hide";

        //设置被删除后的占位文字的颜色
        json.comments[i].already_del = parseInt(json.comments[i].disabled) == 1 ? "aDel" : "";
       

        var can_reply = false;
        if(json.comments[i].children){
            // 先给true,如果后续遍历“回复”时发现已经有我回复过,那就再改为false
            can_reply = true;

            for(var j=0;j<json.comments[i].children.length;j++){
                var child = json.comments[i].children[j];

                // 如果是我的标,且我已回复过,那就不能再回复了
                if(is_my_demand && that.userId == json.comments[i].children[j].authorId){
                    can_reply = false;
                }

                if(!is_my_demand){
                    can_reply = false;
                }

                //判断回复后面是否应该显示删除按钮
                if((that.userId == json.comments[i].children[j].authorId) && (json.comments[i].children[j].disabled == 0)) {
                    json.comments[i].children[j].show_del = "show";
                }else {
                    json.comments[i].children[j].show_del = "hide";
                }

                //设置被删除后的回复占位文字的颜色
                json.comments[i].children[j].already_del = parseInt(json.comments[i].children[j].disabled) == 1 ? "aDel" : "";

                //判断回复时的四种角色,authorType 为 1:客户;100:工程商;150:客户代表;200:万屏汇官方(平台代表)
                switch(parseInt(child.authorType))
                {
                case 1:
                    child.authorName = '客户回复';
                    break;
                case 100:
                    child.authorName = '客户回复';
                    break;
                case 150:
                    child.authorName = '客户代表回复';
                    break;
                case 200:
                    child.authorName = '万屏汇官方回复';
                    break;
                }
            }
        }else{
            // 当前登录用户就是发标的人,那就可以回复
            if(is_my_demand){
                can_reply = true;
            } else {
                can_reply = false;
            }
        }

        json.comments[i].show_reply = (can_reply ? "show" : "hide");
    }
}
总结

一开始我的出发点是循环遍历json,再循环遍历html元素,以控制回复和删除按钮的隐藏或显示。其实并不需要这样,运用mustache就可以解决,不遍历html

回复的逻辑,总绕晕了,也是因为变量的true/false和隐藏/显示是反着,不利于理清

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,600评论 18 139
  • # 一度蜜v3.0协议 --- # 交互协议 [TOC] ## 协议说明 ### 请求参数 下表列出了v3.0版协...
    c5e350bc5b40阅读 640评论 0 0
  • 馅饼砸中我了,准确无误的,就在国庆前.我应该喜悦吧,是的,我的确喜悦了一天,之后就不可避免地进入了漫长的纠结和烦恼...
    银子姐阅读 200评论 2 1
  • 在一个乌云密布的傍晚,一个女孩在街上看见了一个男孩,那个男孩长得非常帅,这个女孩只见了这个男孩一面就深深的...
    蒙蒙雨中来看你阅读 219评论 1 0
  • R:阅读原文 I:自己总结 钱这个东西天然就有利息,知识也一样。当一个民族的文化里,没有某个概念对应的词汇时,你是...
    云熙聊亲密关系阅读 398评论 6 4