- movable-view内部有absolute定位时即使指定尺寸也没有宽高?
先占坑说说我遇到的不一致的问题。 首先,我导入了官方的代码片段(https://developers.weixin.qq.com/s/1g3lR6mv73lm),再进行修改开发做成我要的时间轴功能后,模拟器和真机测试都一切正常,然后我把整个page拷贝到我的项目去运行,模拟器和真机都出现view高度为0的情况。 我怀疑是自己没有设置高度宽度,于是制定了较大的宽高,编译刷新或真机都依然无法看见显示出来。 于是我再排查,经过一番研究,我发现可能是我的move-are/moveable-view内部的子view都是position:absolute,我怀疑是这个问题,我再手工加了一个非absolute的view进去(<view style="width:1500px;height:50px;">666</view>),编译刷新结果发现有尺寸了刚好为这个添加的view的高度。 于是我对比发现,小程序代码片段的代码正常运行也支持moveable-view的子view是position:absolute,但实际小程序项目却出现预期效果不一致。 感到很疑惑,moveable-view 已经事先指定过width和height,按经验说,子view如何取position:absolute均不会影响该moveable-view的尺寸才对! 莫非是小程序项目所用的实现机制对于moveable-view尺寸的识别处理与小程序片段还有区别不成? 小程序片段难不成跑的是个webview的实现?而非native view?所以才存在差异? 很抱歉我暂时没有时间提供测试代码,有兴趣先可以用如上的官方代码片段去魔改。
01-12 - 在小程序开发,webview与Page对象能否直接交互?
我遇到一个需求,html页面比较复杂,功能需要用多个iframe实现无感切换显示。 这个html页面是无自主数据请求的,依赖着WebView宿主调用来取得业务数据,我知道WebView内H5可以postMessage给小程序,但是我想要实现的是WebView内H5调用小程序页面Page的方法来取得它所需的业务数据,比如在android开发我可以通过JavaScriptInterface来实现JS调用Java方法取数据。 微信官方,你们是基于安全的角度没有开放这样的API调用吗? 如果说小程序Page调用WebView是出于不允许开发者逃逸代码审核的原则,那么WebView调用小程序Page的方法(或是暴露的function)这是安全的。
2021-06-23 - 小程序页面分享到聊天之后的消息被他用户点击进入小程序是怎么个执行过程?
首先:开发版本的测试,我发现onShareAppMessage回调 return 的 {title,path,imageUrl}貌似都没起到作用,但明明回调已经执行了! 其次:我发现,这种被分享的情况进入小程序的,都是有点奇葩,它是直接进入到对应的页面,我本来做了统一入口page,来处理以下的问题的! 问题是什么?我需要保证新用户从分享进来的时候进行一次自动登录!后面才能够正常的浏览被分享的内容! 为什么开发板测试,onShareAppMessage回调处理return自定义的内容不生效。这个不符合逻辑啊!
2019-11-01 - scroll-view 用flex布局开发一行两列不支持且与view有明显差异,限制一行一view?
scroll-view 实现上下滑动列表,每行显示两个item,通过flex布局实现内容折行。 一开始是用view来做列表的父容器,但是发现它在iOS中滚动没有惯性效果,滚动感觉很难受就像踩刹车。 后面想到scroll-view可以解决如上问题,然后将view替换成scroll-view,然后发现一行两列的布局全部变成一行一列,即使你把item的width设置为很小的值也一样。 现在猜想的情况是scroll-view开启scroll-y=true时,不支持这种一行上两个独立 item view 实现的一行两列,可能只能用一行一个view包裹两个item的方法才能实现(wx:for有index)。 请问微信官方开发者,是不是scroll-view 在上下滑动列表模式真的不支持 一行两个view的情况? [代码]<[代码][代码]scroll-view[代码] [代码]scroll-y[代码][代码]=[代码][代码]"true"[代码] [代码]style[代码][代码]=[代码][代码]"height: 400px"[代码] [代码]enable-flex[代码][代码]=[代码][代码]"true"[代码][代码]>[代码][代码] [代码][代码]<[代码][代码]view[代码] [代码]class[代码][代码]=[代码][代码]"item"[代码] [代码]wx:for[代码][代码]=[代码][代码]"{{[1,2,3,4,5]}}"[代码][代码]>Item:{{item}}</[代码][代码]view[代码][代码]>[代码] [代码]</[代码][代码]scroll-view[代码][代码]>[代码]
2019-10-10 - 云开发的云数据库真的太慢了,约3200个doc.get请求,20秒竟然都不够用
有一个数据导出的功能,之前因为遇到一个聚合match不知道怎么写的问题(官方文档都不准确也没撤),所以临时就只能傻瓜式写for嵌套循环去一个个doc.get,自己去统计。 过了一周多点,用户量从当初的10个增长到100多个(内部应用),有管理员反馈数据无法导出。 于是开始排查,动手在执行完查询的后面加console.log然后查看云函数日志,根本就没执行到这一句,就已经超过20秒的极限了。 稍微计算一下,101个用户*31天=3131次 doc.get 请求,可求得每次请求的耗时大概是20*1000ms / 3131 = 6.38ms。 于是,肯定不能这么写,这个程序性能太低了,该改用聚合函数来计算。 我这个还是用的免费版资源,5ms 大概是内网的正常延迟。
2019-08-04 - 如何使用数据库聚合match过滤$.and
我需要在云函数中查询数据库,聚合计算一个人的某月1-31号的消费金额: [代码]let queryFeeSum = await db[代码][代码] [代码][代码].collection([代码][代码]'lunch'[代码][代码])[代码][代码] [代码][代码].aggregate()[代码][代码] [代码][代码].match({[代码][代码] [代码][代码]eno: eno,[代码][代码] [代码][代码]date: $.and([$.gte([[代码][代码]'$date'[代码][代码], dateNumRange.begin]), $.lte([[代码][代码]'$date'[代码][代码], dateNumRange.end])])[代码][代码] [代码][代码]})[代码][代码] [代码][代码].group({[代码][代码] [代码][代码]_id: [代码][代码]null[代码][代码],[代码][代码] [代码][代码]fee: $.sum([代码][代码]'$goodsPrice'[代码][代码])[代码][代码] [代码][代码]})[代码][代码] [代码][代码].end()[代码]date是数值型:它的值是8位整数,如20190701、20190728 上面的 $.and 语句按文档中的写法,聚合这个功能也是官方开发出来不久,找不到相关帮助文档。 运行报错,查看日志提示: {"errorCode":1,"errorMessage":"user code exception caught","stackTrace":"errCode: -502001 database request fail | errMsg: [FailedOperation] (BadValue) unknown operator: $and; "} 请问一下,为什么提示操作失败,无效的值、未知的操作器$and。
2019-07-28 - 什么时候能解决云开发使用uploadFile HTTPAPI上传文件后不可用
使用云开发,在自己的服务器管理微信云端的小程序数据,实现ServerLess的小程序服务。 在这个项目进行到测试阶段,发现了API的BUG问题,使用云开发HTTP API上传文件到微信小程序云存储,在小程序中使用 image src=cloud://xxxxfileID,控制台显示报错,不知道是什么原因。 按文档说明,使用的API是: POST /tcb/uploadfile?access_token={token}该调用成功后会返回一些重要参数,在之后还需要使用这些参数再次调用接口,完成将文件上传到腾讯云。 下面是一段Java代码,实现按参数返回的接口地址和其他参数,调用上传文件。 [代码]String fileName2 = Optional.of(fileName).orElse(file.getName());[代码][代码]MultipartBody requestBody = [代码][代码]new[代码] [代码]MultipartBody.Builder()[代码][代码] [代码][代码].addFormDataPart([代码][代码]"key"[代码][代码], path)[代码][代码] [代码][代码].addFormDataPart([代码][代码]"Signature"[代码][代码], authorization)[代码][代码] [代码][代码].addFormDataPart([代码][代码]"x-cos-security-token"[代码][代码], token)[代码][代码] [代码][代码].addFormDataPart([代码][代码]"x-cos-meta-fileid"[代码][代码], cosFileId)[代码][代码] [代码][代码].addFormDataPart([代码][代码]"file"[代码][代码], fileName2, RequestBody.create(MultipartBody.FORM, file))[代码][代码] [代码][代码].build();[代码][代码]Request request = [代码][代码]new[代码] [代码]Request.Builder()[代码][代码] [代码][代码].url(url)[代码][代码] [代码][代码].post(requestBody)[代码][代码] [代码][代码].build();[代码][代码]try[代码] [代码](Response response = okHttpClient.newCall(request).execute()) {[代码][代码] [代码][代码]return[代码] [代码]response.body().string();[代码][代码]} [代码][代码]catch[代码] [代码](IOException e) {[代码][代码] [代码][代码]Integer code = [代码][代码]1[代码][代码];[代码][代码] [代码][代码]String codeString = [代码][代码]"Call failure:"[代码] [代码]+ e.getClass().getSimpleName();[代码][代码] [代码][代码]String errorMessage = e.getMessage();[代码][代码] [代码][代码]throw[代码] [代码]new[代码] [代码]WeChatCloudAPICallFailException(code, codeString, errorMessage);[代码][代码]}[代码]在这一步,调用也成功,然后在微信开发者工具也能看到已上传的文件和文件夹。 但是,这个文件夹显示有点奇怪,还带了冒号,请看图: [图片] [图片] 上面显示的FileID也是比较奇怪,与调用 HTTP API 上传文件得到的FileID不一样, HTTP API给我返回的值是cloud://test-p73gd.7465-test-p73gd-1259274660/upload_201907/MPCCb0a66c6ee1d7420f94aabb6d5bdcc925.png 如果是直接用小程序 wx.cloud.uploadFile 上传文件,那上传的文件夹不会出现这种奇怪的情况,而且文件fileID是正常可用的。 所以这个应该是云HTTP API的BUG。 遇到这个问题已经快一个月了,之前也有提过,很着急等着,麻烦官方反馈一下,不胜感激!
2019-07-26 - 云数据库await查询全部数据的官方文档示例代码有BUG!
官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-server-api/database/collection.get.html 有BUG的示例:示例代码 3:取集合所有数据 今天我的小程序在用户使用反馈到一个问题,数据导出提示出错,很明显新项目刚测试还未正式上线今天并没有产生要到处的数据。 于是到开发工具的云控制台,查询云函数的运行日志,发现有如下的报错信息: {"errorCode":1,"errorMessage":"user code exception caught","stackTrace":"Reduce of empty array with no initial value"} 由于没遇到过这个问题,于是就查询了MDN: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Errors/Reduce_of_empty_array_with_no_initial_value 所以知道,这个原因是因为reduce的数据为空。 虽然只是个实例代码,但作为文档参考,很多新手还是会直接照搬代码,我建议官方要把这个代码优化一下,修改之后如下: [代码]const cloud = require([代码][代码]'wx-server-sdk'[代码][代码])[代码][代码]cloud.init()[代码][代码]const db = cloud.database()[代码][代码]const MAX_LIMIT = 100[代码][代码]exports.main = async (event, context) => {[代码][代码] [代码][代码]// 先取出集合记录总数[代码][代码] [代码][代码]const countResult = await db.collection([代码][代码]'todos'[代码][代码]).count()[代码][代码] [代码][代码]const total = countResult.total[代码][代码] [代码][代码]// 计算需分几次取[代码][代码] [代码][代码]const batchTimes = Math.ceil(total / 100)[代码][代码] [代码][代码]// 承载所有读操作的 promise 的数组[代码][代码] [代码][代码]const tasks = [][代码][代码] [代码][代码]for[代码] [代码](let i = 0; i < batchTimes; i++) {[代码][代码] [代码][代码]const promise = db.collection([代码][代码]'todos'[代码][代码]).skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()[代码][代码] [代码][代码]tasks.push(promise)[代码][代码] [代码][代码]}[代码][代码] [代码][代码]// 等待所有[代码][代码] [代码][代码]const result =[代码] [代码](await Promise.all(tasks)).reduce((acc, cur) => {[代码][代码] [代码][代码]return[代码] [代码]{[代码][代码] [代码][代码]data: acc.data.concat(cur.data),[代码][代码] [代码][代码]errMsg: acc.errMsg,[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}, -Infinity)[代码] [代码] result.data = result.data || [] // 处理 没有数据时 reduce 结果 undefined 的情况[代码] [代码] return result [代码] [代码]}[代码]修改了 reduce,增加一个参数 initialValue,资料参考: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce -----------完毕-------------
2019-07-24 - 提BUG:aggregate.match()不能用command匹配
请看代码: [代码]let querySum = await collection[代码][代码] [代码][代码].aggregate()[代码][代码] [代码][代码].match({[代码][代码] [代码][代码]dateNum:_.eq(20190723)[代码][代码] [代码][代码]})[代码][代码] [代码][代码].group({[代码][代码] [代码][代码]_id: [代码][代码]'$date'[代码][代码],[代码][代码] [代码][代码]sale: $.sum([代码][代码]'$goodsPrice'[代码][代码])[代码][代码] [代码][代码]})[代码][代码] [代码][代码].end()[代码]使用_.eq竟然查不出数据,去掉它就可以。
2019-07-23 - 请问一个微信服务端 HTTP API uploadFile 的参数问题
uploadFile 官方文档地址 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/storage/uploadFile.html 请求数据示例[代码]{[代码][代码] [代码][代码]"env"[代码][代码]: [代码][代码]"test2-4a89da"[代码][代码],[代码][代码] [代码][代码]"path"[代码][代码]: [代码][代码]"this/is/a/example/file.path"[代码][代码]}[代码] 可能是文档这个地方写的不是特别清楚,我一直不能很好理解 path 到底是一个目录还是文件(完整路径)! 反复调试,一直都没解决。 如果 path 传入参数 "test_files/1.jpg" 则调用返回失败:errCode:-503002 errMsg:不具备访问权限 hint: [4A9CGA01882162] 如果 path 传入参数 "test_files/" 同样调用返回失败:errCode:-503002; errMsg:不具备访问权限 hint: [PQXICa03642028] 如果 path 传入参数 "test_files" 还是调用返回失败:errCode:-503002; errMsg:不具备访问权限 hint: [riNuSa05592162] 然后 path 不管你传入 "/test_files" 还是 "/test_files/" 都是一样返回失败: errCode:-503001; errMsg:Invalid path: "/test_files" hint: [4Cl.ea04302028] errCode:-503001; errMsg:Invalid path: "/test_files/" hint: [6KM9oa05322028] 以为是path写的目录要手工建立,我就在微信IDE里面的云开发窗口下面,云存储里面新建了文件夹test_files,问题都一直没有解决。 实在是没办法理解这个参数,也找不到相关的帖子,在此希望知道的朋友指导一下为什么。 谢谢
2019-06-22