请稍等 ...
×

采纳答案成功!

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

关于3-7中组件onLoad和onLeave添加和删除类的问题

不知道是我理解问题,还是Lyn老师没注意。

在没有执行onLoad或者onLeave时,new出来的那个元素的class应该是h5_component,h5_component_name_myName, 

h5_component_base这三个。

当执行

component.on('onLoad', function(){

    component.addClass(cls + '_load').removeclass(cls + '_leave');

    return false;
});

的时候,会把h5_component_name_myName这个类给删掉。

所以我个人觉得是不是应该如下才对

component.on('onLoad', function(){

  component.addClass(cls + '_load').removeClass('h5_component_' + cfg.type + '_leave');

  return false;
});

onLeave同理

正在回答

5回答

Lyn 2016-05-12 10:43:27

统一回复下大家:

H5ComponentBase是应该传入一个 name 参数的,并且会体现在样式中,如,当我传入「myName」作为组件的名称的时候。

https://img1.sycdn.imooc.com/szimg//5733ebfe00017a1b10770693.jpg

那么在生成的代码里面,浏览器里面应该看到,即使有  h5_component_baseh5_component_base_load 也应该有 h5_component_name_myName

https://img1.sycdn.imooc.com/szimg//5733ec2e00017a0f10760844.jpg

但是代码中有个错误,cls 的定义不太正确(继承 3-5 的内容,当时还没有考虑 onload 、onleave)

https://img1.sycdn.imooc.com/szimg//5733ec950001f9f514460712.jpg

所以,当代码执行到真正的 onLeave、 onLoad 的时候:

5733ecc100019d6905000281.jpg

因为 addClass、removeClass 可以传入多个样式类名(用空格分割),所以当执行 removeClass(cls_'_leave') 的时候,实际上执行的是 

removeClass('h5_component_'+cfg.type+' h5_component_name_'+name) 这里 h5_component_name_myName 被删除了,这是一个BUG!!

结果如下图,浏览器。没有 myName 相关的样式了。

5733ecc100018ab905000313.jpg

----

在这个章节,应该把这个讲清楚,非常感谢 @凝雪幽樱 @isjia 提出的问题,我会尽快修复这个BUG,有任何问题也可以直接私信给我。

1 回复 有任何疑惑可以回复我~
  • 提问者 凝雪幽樱 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2016-05-16 13:13:05
Lyn 2016-05-11 10:37:37

你的代码是正确的。


实际上 cls 的定义就是 'h5_component_' + cfg.type

H5ComponentBase.js : 7

    // 把当前的组建类型添加到样式中进行标记
    var cls = ' h5_component_'+cfg.type;


0 回复 有任何疑惑可以回复我~
  • 提问者 凝雪幽樱 #1
    Lyn老师,你视频里面不是还传了一个name参数,然后cls是这样
    var cls = 'h5_component_name_' + name + ' h5_component_' + cfg.type;
    还是说name的那个不用在意这个细节...
    回复 有任何疑惑可以回复我~ 2016-05-11 10:43:04
  • 提问者 凝雪幽樱 #2
    我看到后面章节中改掉这个问题了,那没事了
    回复 有任何疑惑可以回复我~ 2016-05-11 13:53:44
Helianthuserin 2016-06-05 10:52:31

类名命名的时候最好简化点。。https://img1.sycdn.imooc.com/szimg//575393cc0001adee05700093.jpg 

这么多很长很像的类看的头要炸了。。

2 回复 有任何疑惑可以回复我~
isjia 2016-05-11 21:10:17


老师的代码误导大家,尽然还多此一举地把'h5_component_name_'+ name 移动到前面,建议视频里面纠正一下
1 回复 有任何疑惑可以回复我~
  • Lyn #1
    非常抱歉,因为3-7的代码是继承之前3-5的,所以这部分的代码的确不是很合理。
    回复 有任何疑惑可以回复我~ 2016-05-12 10:34:56
  • Sappho #2
    请问为什么移动到前面就可以避免删除'h5_component_name_'+ name了?
    回复 有任何疑惑可以回复我~ 2016-12-26 19:48:56
 // 把当前的组建类型添加到样式中进行标记
    var cls = ' h5_component_'+cfg.type;
//如果cls改成上面的话,那么component也要进行更改才行,不然传进来的参数name就没有用了
var component=$('<div class="h5_component h5_component_name_'+name+cls+'" id="'+id+'"></div')
0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信