工作笔记

1.关于vue中v-html遇到null.a的问题,很不幸,浏览器控制台并不会报错,并且会莫名其妙的阻塞渲染。在拿到后端传过来的数据最好做一个检查,有效就使用,无效的话就使用默认值吧。

2.微信分享接口将不再具有success回调以及fail回调。

3.app里面的globalData和page里的data所建立的关系并不是响应式绑定。

4.微信页面栈的问题,最多同时存在五个页面在栈中,正常情况下,navigateTo是不断将新页面入栈的,redirectTo没有变化,出一个进来一个,navigateBack是出栈的;要解决这个问题就不要设计过于复杂的页面依赖跳转关系。

5.在react的jsx表达式中使用&&的副作用,{0 && 1} 将会渲染出一个1的dom;而{null && 1}就不会了。也就是说null以及undefined并不会react转化为dom元素。

6.js的字段名陷阱,参考下面代码:

1
2
3
4
let obj = {a: 2};
let key = 'a';
delete obj.key; // 返回true,但是并没有删除a字段,而是删除的key字段,正确写法应该像下面这样
delete obj[key]; // 由于没有加引号,所以取了变量的值

7.一个不太好找关于xtemplate和zepto结合使用时不太好找出bug的问题。问题描述:使用zepto给dom元素绑定点击事件的时候,出现的问题是点击不走自己设置的回调,而且绑定的时候还是在document.ready里面绑定的。那么这是为什么呢?肯定是dom结构还没有准备好,就进行绑定了,何况是配合xtemplate进行使用,此时document已经ready了,但是xhr可能还在loading,xhrloading好后,一部分dom才会被添加到文档流里面,此时自然在document.ready里面进行绑定的话是于事无补的。

8.如果遇到了在字体数量变多的情况下接着所导致的字体的px变大的情况,那么可以使用如下的css来修复,原因不清楚:

1
2
3
4
.someDom {
display: inline-block;
max-height: 1.4em; /** 并不是说值必须得为1.4em,而是说得显式设置一个max-height才可 */
}

9.如果一个input设置了autofocus的话,那么很可能在第一次渲染的时候页面很容易就自动聚焦到那里了。但是如果重绘了(比如网络图片到了),那么这个自动聚焦就已经被cancel了。那么对于一种很常见的需求就是如何点击按钮,让input输入框自动聚焦并且唤起键盘呢。答案就是监听点击事件,然后focus一下,大致如下所示:

1
2
let input = document.getElementById('#numberInput');
input && input.focus();