快应用继续踩坑,数据请求,上传接口,以及数据渲染遇到的一些问题

本文分享了在快应用中实现类似说说功能的过程,包括图片上传、说说列表渲染及回复留言的难点与解决方案。重点介绍了上传图片的调试技巧、列表渲染的注意事项以及动态更改type类型以解决结构一致性问题。

以上问题是我在写一个类似于说说功能的时候遇到的问题,

首先是发表说说,最基本的图片和内容发布,

内容文字就很简单的处理,踩一下上传图片的坑,

这个上传图片我真的很服气,我各种办法都试了,图片路径也有,就是上传必失败,

又去确认了一下,官方文档没有任何说明,如果一直返回fail函数 

解决方法:关掉调试,关掉调试,那很多数据都看不到了, 打在页面上或者showtoast吧

上传图片数组上去

var picIds=[]
for(var i=0;i<_this.imgs.length;i++){
    picIds[i]=(parseInt(_this.imgs[i].id))
}
var postData={
    userId: _this.app.user.id,
    content: _this.content,
    isOpen: true,
    scenesId:0,
    moodValue:0,
    isAnonymous:0,
    pictures: picIds
}

 快应用会把数组自动转换为string类型的。前端毫无办法,需要后台解析一下

上传好了,就是说说列表

上一段代码 list-item的问题 以为内容很多所以,并且有些说说有图片有些没有图片 ,有无评论啊什么的就很多节点的缺失或存在

  <block for="(index,item) in list">
                            <list-item type="mood_item_{{index}}" if="{{!item.hide}}">
                                <div class="mood_item">
                                    <div class="user_info">
                                        <div class="friend_face" @click="goFriend(item.userId)">
                                            <image class="friend_face"
                                                   src="{{item.isAnonymous?item.randomFaceUrl:item.faceUrl}}"
                                                   show="{{!item.userExpertId}}"></image>
                                            <image class="friend_face"
                                                   src="{{item.expertInfo?item.expertInfo.faceUrl:''}}"
                                                   show="{{item.userExpertId}}"></image>
                                        </div>
                                        <div class="v_expert" show="{{item.userExpertId!=0}}">
                                            <image src="http://oss.xqzs.cn/resources/psy/asker/header_img_v.png"></image>
                                        </div>
                                    </div>
                                    <div class="content">
                                        <div class="friend_name">
                                            <text show="{{item.userExpertId}}" class="happy_txt_color">
                                                {{item.expertInfo ? item.expertInfo.nickName : ''}}
                                            </text>
                                            <text class="bluecolor" show="{{!item.userExpertId}}">{{item.nickName}}
                                            </text>
                                        </div>
                                        <div class="say_text">
                                            <div show="{{item.showLongInt}}">
                                                <text class="content_text">{{item.content}}</text>
                                                <text class="more" @click="showLongInt(index)"
                                                      show="{{item.longIntroduction}}">收起
                                                </text>
                                            </div>
                                            <div show="{{!item.showLongInt}}">
                                                <text class="content_text">{{item.contentShort}}</text>
                                                <text class="more" @click="showLongInt(index)"
                                                      show="{{item.longIntroduction}}">全文
                                                </text>
                                            </div>
                                        </div>
                                        <div class="imgList">
                                            <div class="img1" show="{{item.pics.length == 1}}">
                                                <image src="{{item.pics[0].smallUrl}}"
                                                       show="{{item.pics[0].smallUrl!=''}}"
                                                       @click="showBigimage(index,0,item.pics[0].bigUrl)"></image>
                                            </div>
                                            <div class="img2" show="{{item.pics.length == 2}}">
                                                <image src="{{pic.smallUrl}}" show="{{pic.smallUrl!=''}}"
                                                       for="(picIndex,pic) in item.pics"
                                                       @click="showBigimage(index,picIndex,pic.bigUrl)"></image>
                                            </div>
                                            <div class="img3" show="{{item.pics.length == 3}}">
                                                <image src="{{pic.smallUrl}}" show="{{pic.smallUrl!=''}}"
                                                       for="(picIndex,pic) in item.pics"
                                                       @click="showBigimage(index,picIndex,pic.bigUrl)"></image>
                                            </div>
                                        </div>
                                        <div class="item_address">
                                            <text></text>
                                        </div>
                                        <div class="content_info">
                                            <text class="time">{{item.outTime}}</text>
                                            <text class="btn_del" if="{{user.id==item.userId}}"@click="deleteMyMood(item.id,index)">删除
                                            </text>
                                            <div class="info_right">
                                                <div @click="care(index)">
                                                    <text class="care_num">{{item.careCount}}</text>
                                                    <image class="care_img {{item.hit?'heartUp':''}}"
                                                           src="{{item.careImg}}"></image>
                                                </div>
                                                <div @click="showReply(index,-1)">
                                                    <text class="reply_num">{{item.replycount}}</text>
                                                    <image class="reply_img"
                                                           src="http://oss.xqzs.cn/resources/mood/comments.png"></image>
                                                </div>
                                            </div>
                                        </div>
                                        <div class="commont_box" show="{{item.replies && item.replies.length>0}}">

                                            <block for="(replyIndex,reply) in item.replies">
                                                <div class="friend_commont" @click="showReply(index,replyIndex)"
                                                     show="{{!reply.isDel && (replyIndex<3||item.showAll)}}">
                                                    <div class="name"
                                                         show="{{reply.tomoodreplyid==0||reply.tomoodreplyid==null}}">
                                                        <text show="{{reply.fromuserid==item.userId}}"
                                                              @click="goExpert(reply.from_expertId)">作者
                                                        </text>
                                                        <text show="{{reply.fromuserid!=item.userId}}"
                                                              @click="goExpert(reply.from_expertId)">
                                                            {{reply.from_nickName}}:
                                                        </text>
                                                    </div>
                                                    <div show="{{reply.tomoodreplyid != 0 && reply.tomoodreplyid!=null}}"
                                                         style="flex-direction: row">
                                                        <div class="name" @click="goExpert(reply.from_expertId)">
                                                            <text show="{{reply.fromuserid==item.userId}}">作者 回复 </text>
                                                            <text show="{{reply.fromuserid!=item.userId}}">
                                                                {{reply.from_nickName }} 回复
                                                            </text>
                                                        </div>
                                                        <div class="name" @click="goExpert(reply.to_expertId)">
                                                            <text show="{{reply.touserid==item.userId}}">作者:</text>
                                                            <text show="{{reply.touserid!=item.userId}}">
                                                                {{reply.to_nickName }}:
                                                            </text>
                                                        </div>
                                                    </div>
                                                    <div class="commont">
                                                        <text>{{reply.content}}</text>
                                                    </div>
                                                </div>
                                            </block>
                                            <div if="{{item.replies && item.replies.length>3}}" class="showOthercom"
                                                 @click="showOther(index)">
                                                <text>{{item.showordown}}</text>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </list-item>
                        </block>

出现渲染混乱问题,这是list组件的一个弊端

  • list-item内不能再嵌套list
  • list-itemtype属性为必填属性、
  • list-item内部需谨慎使用if指令for指令,因为相同type属性list-item的DOM结构必须完全相同,而使用if指令for指令会造成DOM结构差异

调试了一早上的结构,没招了,

动态更改type类型,让他没有结构一致的问题

回复留言问题,因为是在同一个list里面的留言数组里的数据,所以用push 和splice 增加或删除自己的留言。

然后赋值一下数组,

  utils.api.put('mood/reply/add', _this.replyData, function (res) {
            if (res.status == 1) {
                let reply = res.data.reply;
                let index = _this.replyDataDom.index;
                let item = _this.list[index];
                if (reply.touserid === item.userId) {
                    reply.to_nickName = "作者";
                }
                item.replycount = res.data.mood.replycount;
                reply.content = face.parseEmoji(reply.content);
                console.log(typeof  item.replies);
                item.replies.push(reply);
                console.log(typeof  item.replies);
                _this.list[index] = item;
                console.log(_this.list[index])
            }
        })

刚开始以为是数组里面的数据结构问题,后来去创了一个简单的页面模拟最简单的数据,发现是可以的。

解决方法:数据更新完之后进行list.concat([])一下 让页面进行数据渲染响应

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值