微信小程序视图层处理增强之WXS

随着微信开发者工具v1.0.0的释出,beta已久的微信小程序视图层的新功能特性WXS(WeiXin Script),也正式到来了。

熟悉微信小程序开发框架的开发者,肯定会对其视图层WXML中缺失的一个功能耿耿于怀,那就是没有办法在视图层对数据进行格式化处理。比如我们从后端获取到一个包含了时间戳数据的数组,然后需要在界面上把这些日期都格式化显示为2017-01-01这种格式的日期形式,在Vue, Angular之类的前端Web框架中,一般在视图层都提供了如filter之类相应比较好用的方案。

而在现有的微信小程序代码中?你能怎么做?估计我们的做法要么是在Page代码中遍历一次数组,做一下格式化;要么,只能让后端返回已经格式化好的数据了。

对于追求程序代码优雅的程序员来说,这简直就是心中一个巨大的疙瘩!微信小程序团队估计没少受这方面的吐槽。因此,这次WXS的推出算是满足了对这种需求的渴望吧。

WXS算是专供WXML调用的有独立作用域的JS模块(不是全功能的JS,感觉有所限制)。举个例子,在这之前,我们是没有办法在WXML的数据绑定括号{{}}中调用JS函数的,所以在WXML层面就缺少了进一步做数据处理的能力。

下列代码是不工作的:

<!-- wxml文件 -->
<view>{{testFunc(name)}}</view>

// some-page.js
Page({
    data: {
        name: "一斤代码"
    },

    testFunc: function (name) {
          return "Hello," + name
    }
})

而有了WXS之后,我们就可以实现我们预期的功能了:

<!-- wxml文件 -->
<view>{{myModule.testFunc(name)}}</view>

<wxs module="myModule">
    function testFunc(name) {
        return "Hello," + name
    }
    module.exports.testFunc = testFunc
</wxs>

// some-page.js
Page({
    data: {
        name: "一斤代码"
    }
})

WXS可以直接定义在wxml文件的<wxs>标签体中,也可以写在独立的.wxs后缀名的文件中,然后在wxml文件中通过<wxs src="..." />的形式引入。

如要要在WXS代码中去引用其他独立.wxs文件,可以通过 require()函数来引入,基本上都是我们熟悉的方式:

var formatUtil = require("./format-util.wxs");
var now = getDate()

formatUtil.formatDate(now)

所以,WXS在功能方面,并没有什么复杂的东西,唯一需要特别注意一些的,就是它的作用域了:

  • <wxs> 模块只能在定义模块的 WXML 文件中被访问到。使用 <include> 或 <import> 时,<wxs> 模块不会被引入到对应的 WXML 文件中。
  • <template> 标签中,只能使用定义该 <template> 的 WXML 文件中定义的 <wxs> 模块。

赶紧去试试吧,看看你现有的代码是不是有可以借助WXS来优化重构一下的地方。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏NetCore

复杂而艰辛的重构之路--起步

你有没有试过,当你踏入一个新的公司,看到了几千几万几十万代码的时候,那种崩溃的感觉? 代码多不可怕,怕的是代码的可读性、维护性、扩展性是如此之差,这时候该怎么办...

21690
来自专栏程序员的碎碎念

利用Ajax提升网页渲染速度——以Highcharts为例

先来看看速度优化对比(这里用了 Django的 DebugToolbar库来查看状态)

13330
来自专栏Java技术栈

12 个非常有趣的 Linux 命令!

-a An accident seems to happen. You'll feel pity for people who cry for help.

19340
来自专栏前端真相

PTC(pay to click)—— 躺着赚钱(比特币)?

19470
来自专栏闻道于事

商城项目回顾整理(一)前台页面布局

登录页面: 1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 ...

43330
来自专栏逸鹏说道

TypeScript 1.6发布:完全支持React/JSX

2012年,微软推出了一个能够在Node.js上运行的开源语言——TypeScript。作为JavaScript的超集,TypeScript在兼容JavaScr...

28050
来自专栏AndroidTv

AndroidTv Home界面实现原理(一)——Leanback 库的使用

接下去应该是梳理一下 Android Tv 主界面实现原理及解析的一个系列博客了,大体上的安排是先介绍 Google 官方提供的 Leanback 库的使用,如...

48770
来自专栏晨星先生的自留地

看zwell怎么带我解决方程式poc的bug

19920
来自专栏牛客网

19实习腾讯前端面经

我是填的部门是IEG,不过捞起我简历的是SNG。Anyway,现在到HR面了。希望一切顺利吧~ 现在来回馈牛客网啦。 腾讯 2018.03.17 一面 (内推)...

73090
来自专栏疯狂的小程序

流动图书馆小程序实战

流动图书馆是一个图书漂流和借阅工具,旨在共享闲置图书,并链接趣味相投的小伙伴。

61190

扫码关注云+社区

领取腾讯云代金券