支付宝小程序框架 SJS·介绍

2020-09-18 10:28 更新

SJS(safe/subset javascript)是小程序一套自定义脚本语言,可以在 AXML 中使用其构建页面结构。 SJS 是 JavaScript 语言的子集,与 JavaScript 是不同的语言,其语法并不与 JavaScript 一致,请勿将其等同于 JavaScript。

使用方式

在 .sjs 文件中定义 SJS:

  1. // pages/index/index.sjs
  2. const message = 'hello alipay';
  3. const getMsg = x => x;
  4. export default {
  5. message,
  6. getMsg,
  7. };
  8. // pages/index/index.js
  9. Page({
  10. data: {
  11. msg: 'hello taobao',
  12. },
  13. });
  14. <!-- pages/index/index.axml -->
  15. <import-sjs name="m1" from="./index.sjs"/>
  16. <view>{{m1.message}}</view>
  17. <view>{{m1.getMsg(msg)}}</view>

页面输出:

  1. hello alipay
  2. hello taobao

注意

  • sjs 中只支持使用 import、export 管理模块依赖。
  • sjs 只能定义在 .sjs 文件中。然后在 axml 中使用 <import-sjs> 标签引入。
  • sjs 可以调用其他 sjs 文件中定义的函数。
  • sjs 是 JavaScript 语言的子集,请勿将其等同于 JavaScript。
  • sjs 的运行环境和其他 JavaScript 代码是隔离的, sjs 中不能调用其他 JavaScript 文件中定义的函数,也不能调用小程序提供的 API。
  • sjs 函数不能作为组件事件回调。
  • sjs 不依赖于基础库版本,可以在所有版本小程序中运行。

import-sjs 标签

示例代码:

  1. // pages/index/index.js
  2. Page({
  3. data: {
  4. msg: 'hello alipay',
  5. },
  6. });
  7. // pages/index/index.sjs
  8. function bar(prefix) {
  9. return prefix;
  10. }
  11. export default {
  12. foo: 'foo',
  13. bar: bar,
  14. };
  15. // pages/index/namedExport.sjs
  16. export const x = 3;
  17. export const y = 4;
  18. <!-- pages/index/index.axml -->
  19. <import-sjs from="./index.sjs" name="test"></import-sjs>
  20. <!-- 也可以直接使用单标签闭合的写法
  21. <import-sjs from="./index.sjs" name="test" />
  22. -->
  23. <!-- 调用 test 模块里面的 bar 函数,且参数为 test 模块里面的 foo -->
  24. <view> {{test.bar(test.foo)}} </view>
  25. <!-- 调用 test 模块里面的 bar 函数,且参数为 page.js 里面的 msg -->
  26. <view> {{test.bar(msg)}} </view>
  27. <!-- 支持命名导出(named export -->
  28. <import-sjs from="./namedExport.sjs" name="{x, y: z}" />
  29. <view>{{x}}</view>
  30. <view>{{z}}</view>

页面输出:

  1. foo
  2. hello alipay
  3. 3
  4. 4
属性 类型 是否必填 说明
name String 当前<import-sjs> 标签的模块名
from String 引用 .sjs 文件的相对路径

说明

name 属性指定当前 <import-sjs> 标签的模块名。在单个 AXML 文件内,建议将 name 值设为唯一。若有重复模块名则按照先后顺序覆盖(后者覆盖前者)。不同 AXML 文件之间的 <import-sjs> 模块名不会相互覆盖。

name 属性可使用一个字符串表示默认模块名,也可使用 {x} 表示命名模块的导出。

注意

  • 引用时务必使用 “.sjs” 文件后缀。
  • 若定义了一个 .sjs 模块,但从未引用,则该模块不会被解析与运行。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号