小程序

从iOS的世界初探微信小程序开发遇的坑与喜(持续更新...)

2017-10-12  本文已影响59人  JABread

前言

作为一名勤恳单纯的未来iOS开发者,受迫于对新事物的好奇,便义无反顾地举手加入了团队里一个小程序项目的开发中。

首先要声明一下:

  • 本人对前端了解微浅,微信小程序开发也无深入了解,这里仅作为一篇小程序的项目经验总结文来跟大家分享。
  • 微信小程序处于发展中,内嵌的方法仍在不断改善与补充,相信一些坑也会在未来的版本中被填平。
    本文基于的基础库版本为1.5.3,内容如有疏漏,欢迎指教。
微信小程序

Dry goods 【干货】

一. 值

1. setData
1.
setData:是逻辑层(.js)向视图层(.wxml)进行的数据渲染,是一个异步操作,所以可能需要用到延迟执行方法来确保赋值成功后的操作:
setTimeout(function () {
   
  })
 }, duration) // duration: 毫秒(ms)
2. 
// 在该作用域里赋值能成功而page的data数据没有更新。但似乎没必要做这样不去刷新页面数据的操作,因为不是视图层需要的数据源没必要写在data中,而且这样可能会污染该值。
 this.data.testData = testData 
// 这是真正需要的赋值操作,刷新值后渲染页面。
 that.setData({
    testData: testData,
 })
3.
// 在闭包中用到this需首先将其引用,并且需要声明在赋值的作用域外层,否则会报`Cannot read property 'data' of undefined`错误。
  var that = this
  this.setData({
     testData: that.data.testData2,
  })
// 若setData操作仍在一个闭包内,则同理写成that.setData({})。
{ // 闭包
  that.setData({
     testData: that.data.testData2,
  })
}
2. 小程序码传参

向后端生成小程序码的请求中传入页面路径path与约定参数(test),即可同navigator跳转方法获得类似。
onLoad: function (options) { var t = options.test }

3. 函数不支持带默认参数,有参数的函数,必须传参,而且必须每一个都传,如果是回调闭包也必须提供空操作。举个...
(network.js)声明的地方
// 获取社团详情
function getCommunityDetail(communityId, success, fail) {
  this.get(url.base + url.communityDetail + communityId,
    function (res) {
      success(res)
    },
    function (res) {
      fail(res)
    })
}

 (communityInfo.js) 用到的地方
network.getCommunityDetail(options.communityId,
      function(success) {
      // Does something...
      },
      function(fail) {
     // 尽管这里可能不需要做失败处理,但仍需提供这样的空操作
      })
4. dataset

dataset: 用于组件中传递数据
注意:其设置变量名与取值变量名的格式要求。(文档说明如下)

   (xxx.wxml)
<view data-alpha-beta="1" data-alphaBeta="2" bindtap="bindViewTap"> DataSet Test </view>
    (xxx.js)
Page({
  bindViewTap:function(event){
    event.currentTarget.dataset.alphaBeta === 1 // `-` 会转为驼峰写法
    event.currentTarget.dataset.alphabeta === 2 // 大写会转为小写
  }
})

二. 组件

wx tip: 请勿在 scroll-view 中使用 textarea、map、canvas、video 组件。
so,注定她们是不安定的。但在这里就不一一展开了。

1. scroll-view
// 这会导致整个scroll-view内的滚动条都被隐藏。
::-webkit-scrollbar {
  width: 0;
  height: 0;
  color: transparent;
}
2. canvas
3. button
4. textarea

textarea标签的默认输入最大输入长度为140。可设置其css属性 maxlength

5. swiper
  1. 设置高度时须将每个item的高度都赋值一遍,防止造成内容显示高度不一致(模拟器上显示正常,真机上内容显示有偏差)。
  2. 解决 swiper-item 因内容高度不一致而导致部分item无内容显示的可选方案:切换item时重载数据。

三. util

1. requrie不支持绝对路径,须使用相对路径导入

这个bug确实很让人抓狂。

2. 若需要配置指定page的页面信息,在.json文件中直接配置对应属性即可,而不要写成app.json中配置所有页面信息的格式(如下)
(app.json):不仅有配置页面信息的`window`属性,还包括注册页面的`pages`等属性。
{
"pages": [
    // register pages
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "CommunityUnion",
    "navigationBarTextStyle": "black"
  }
}
(页面.json)
{
   "backgroundTextStyle": "light",
   "navigationBarBackgroundColor": "#fff",
   "navigationBarTitleText": "页面", 
   "navigationBarTextStyle": "green"
}
3. 设置page背景颜色
// 在page对应的.wss文件中设置
page {
  background-color: "#f4f5f7";
}

在对应page的.json中设置 background-color 属性不是修改页面的背景颜色,而是修改页面的窗口颜色,即页面下拉时出现的窗口颜色。

后话

微信小程序从内测至今已有一年多时间,而我只是在暑假期间(大二)粗略地看了一下开发文档(这里不得不吐槽一下文档网页与其搜索功能),小程序开发过程中给我的感觉是开发起来没有太多的自由,留给开发者的空间不够大,可喜的是微信小程序一直在进步与完善,在社区中您会非常欣(nan)喜(shou)地发现,收到的微信官方答复大多数都是:xx功能考虑在未来的版本中加入...

(收)

上一篇 下一篇

猜你喜欢

热点阅读