请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师您好,在6-6章节中,初始化功能有所不理解,请指教一下

当在没有缓存,首次进入页面时,我点入第一篇文章,有初始化第一条缓存,并赋值false,但是点入第二个文章的时候,第二条缓存并没有初始化,没有赋值,返回的是undefined,麻烦能解释一下嘛。

https://img1.sycdn.imooc.com//szimg/5a32940a0001693205300327.jpg

https://img1.sycdn.imooc.com//szimg/5a32940a00019cb309380340.jpg


正在回答

3回答

当你点击第二个文章的时候,postsCollected 里面只有{0:fase},  这时候postId = 2; 你代码中调postsCollected[postId] 也就是调postsCollected[2] ,因为里面没有2这个key,所以取不到,肯定是undefined。而且这个初始化是针对postsCollected为空的时候,当里面有{0:fase},其实走的是if语句。

0 回复 有任何疑惑可以回复我~
  • 提问者 黑猫会咬人 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2017-12-21 10:06:55
一起玩137 2018-02-01 22:57:19

老师这方法有个小小的bug

首先描述一下老师原本的逻辑:

第一步:获取缓存集

第二步:判断缓存集是否存在

如果postsCollected缓存集存在,那么就获取缓存集中对应的id号,前端状态变量collected就为真,显示图标已收藏

否则,就是缓存集不存在,那么就先创建一个空的缓存集,将当前文章缓存状态先设置为false,存入缓存集。collected默认为false

这里面的问题是:如果缓存集存在,但是对应的id号不存在呢?获取不到对应的id号,那么postCollected就会被认为是undefine,出现错误。

因此,我的修改是,postCollected应该在判断语句前定义好,然后在if条件语句(判断缓存集是否存在)中再嵌套一个if条件语句(判断是否存在对应的id号),如果有更好的办法请及时告知,非常感谢。

步骤更改如下:

第一步:获取缓存集

第二步:获取缓存文章id

第三步:判断缓存集是否存在

         如果缓存集存在     继续判断对应的id值是否存在(存在      设置collected调节前端收藏状态;  不存在    设置当前文章的缓存为false)

         缓存集不存在    创建一个空的缓存集对象    设置当前文章缓存为false    

备注:collected不设置就默认为false

//img1.sycdn.imooc.com//szimg/5a732a7100018a7505390543.jpg

2 回复 有任何疑惑可以回复我~
  • 哥们,能不能请教你一个问题,就是后面的oncollection的方法为了获取postid,在前面定义了一个this.data.current=postid,这里是属于赋值,那么如果我换成this.setdata方法的话是this.setdata({   postid:postId     })?
    回复 有任何疑惑可以回复我~ 2018-03-07 11:18:41
  • 方便截图吗?
    回复 有任何疑惑可以回复我~ 2018-03-07 16:14:33
慕虎5376285 2018-02-03 13:07:14

视频里 老师应该没有对onload进行测试,直接去测试收藏按钮了,所以没有发现这个问题,我是加了一层判断有没有对应id的缓存记录,就行了

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号