cml
(Хамелеон) Как платформа, которая действительно позволяет набору кодов запускать несколько терминалов, она предоставляет стандартную модель MVVM и разрабатывает различные терминалы унифицированным образом.
В то же время она имеет независимую运行时框架(runtime)
,数据管理(store)
,组件库(ui)
,接口(api)
.
также,cml
на перекрестке能力加强
,能力统一
,表现一致
В этом отношении проделана большая работа.
Сегодня, чтобы элегантно обновить свои проекты, быстро получить доступ и принести вам богатыйруководство по миграции cml~
Отправить 5-минутный видеоурок
Адрес источника:GitHub.com/ Просто Алон есть/ Цай Мин-лян…
Структура каталогов
Как мини-программы WeChat,cml
содержит описание всей программыapp
и несколько описаний соответствующих страницpage
.
Структура каталога мини-программы
.
├── components // 包含各个组件
├── pages // 包含各个页面
├── app.js // 包含各个组件
├── app.js // 应用启动入口
├── app.json // 全局配置
├── app.wxss // 全局样式
└── project.config.json // 项目配置文件
структура каталогов cml
.
├── dist // 各个端构建结果
│ ├── alipay
│ ├── baidu
│ ├── wx
│ ├── web
│ ├── weex
│ └── config.json // 跨端配置map映射表
├── node_modules // 第三方库
├── mock // 模拟 接口数据 和 模板数据
├── src // 源代码开发目录
│ ├── app // 应用启动入口
│ ├── assets // 静态资源
│ ├── components // 包含组件
│ ├── pages // 包含页面
│ ├── store //数据管理
│ └── router.config.json // 路由配置文件
├── chameleon.config.js // 项目配置文件
└── package.json // npm包配置文件
Как изменить конфигурацию
В малом программном проекте он делится на:
апплет - конфигурация проекта
Может использоваться в корневом каталоге проектаproject.config.json
файл для настройки проекта.
Пример конфигурации:
{
"miniprogramRoot": "./src",
"debugOptions": {}
}
апплет - глобальная конфигурация
в корневом каталоге апплетаapp.json
Файл используется для глобальной настройки апплета WeChat, определения пути к файлу подкачки, производительности окна, установки времени ожидания сети, установки нескольких вкладок и т. д.
Пример конфигурации:
{
"pages": ["pages/index/index", "pages/logs/index"],
"window": {
"navigationBarTitleText": "Demo"
},
"networkTimeout": {
"request": 10000,
"downloadFile": 10000
}
}
Мини-программа - Конфигурация страницы
Каждая страница апплета также может использовать.json
файл для настройки поведения окна этой страницы.
Конфигурация страницы может быть установлена толькоapp.json
средняя частьwindow
Содержимое элемента конфигурации, элемент конфигурации на странице будет перезаписан.app.json
изwindow
те же элементы конфигурации в .
Пример конфигурации:
{
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "微信接口功能演示",
"backgroundColor": "#eeeeee",
"backgroundTextStyle": "light"
}
Точно так же вcml
В проекте он разделен на:
cml - конфигурация проекта
chameleon.config.js
Для конфигурационного файла проекта можно настроить сборку, например, приводить ли хэш, сжимать ли и т.д.
Пример конфигурации:
// 设置静态资源的线上路径
const publicPath = '//www.static.chameleon.com/static';
// 设置api请求前缀
const apiPrefix = 'https://api.chameleon.com';
// 合并配置
cml.config.merge({
wx: {
build: {apiPrefix}
},
alipay: {
build: {apiPrefix}
},
baidu: {
build: {apiPrefix}
},
web: {
dev: {
hot: true,
console: true
},
build: {
publicPath: `${publicPath}/web`,
apiPrefix
}
},
weex: {
build: {
publicPath: `${publicPath}/weex`,
apiPrefix
}
}
})
cml — глобальная конфигурация
cml
проектapp
в каталогеapp.cml
документ<script cml-type="json" />
использовал кcml
Приложение выполняет глобальную настройку с возможностью кросс-конечной настройки и дифференциации.
Пример конфигурации:
<script cml-type="json">
{
"base": {
"window": {
"navigationBarTitleText": "各个端共同title",
},
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于小程序位置接口的效果展示"
}
}
},
"wx": {
"window": {
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "差异化 title",
"navigationBarTextStyle":"black"
}
},
"baidu": {
"window": {
"backgroundTextStyle": "light"
}
},
"alipay": {
"window": {
"defaultTitle": "Chameleon"
}
}
}
</script>
cml - конфигурация страницы/компонента
пройти черезusingComponents
настроить组件路径
Зарегистрируйте указанный компонент.
Пример конфигурации:
<script cml-type="json">
{
"base": {
"usingComponents": {
"navi": "/components/navi/navi",
"navi-npm": "cml-test-ui/navi/navi"
}
},
"wx": {
},
"alipay": {
},
"baidu": {
},
"web": {
},
"weex": {
}
}
</script>
Как использовать возможности маршрутизации
Маршрутизация конфигурации мини-программы
app.jsonсписок элементов конфигурацииpages
Поле используется для указания, из каких страниц состоит апплет, и каждый элемент соответствует странице.路径+文件名
Информация.
Первый элемент массива представляет начальную страницу (домашнюю страницу) апплета. Добавить/уменьшить страницы, нужноpages
Массив изменен.
Если проект имеетpages/index/index.wxml
,pages/logs/logs.wxml
Две страницы, вам нужноapp.json
китайский язык
{
"pages": ["pages/index/index", "pages/logs/logs"]
}
Cml настроить маршрутизацию
src/router.config.jsonфайл конфигурации маршрутизации,cml
Встроен набор унифицированных методов управления маршрутизацией для каждого конца. соответственноcml
Отображение конфигурации маршрутизации выглядит следующим образом:
{
"mode": "history",
"domain": "https://www.chameleon.com",
"routes":[
{
"url": "/cml/h5/index",
"path": "/pages/index/index",
"mock": "index.php"
},
{
"url": "/cml/h5/logs",
"path": "pages/logs/logs",
"mock": "logs.php"
}
]
}
В имени файла не нужно писать суффикс файла,cml
Фреймворк будет автоматически искать местоположение.cml
файл для обработки.
Мини-программы используют маршрутизацию
- Откройте новую страницу: вызовите APIwx.navigateTo
- Перенаправление страницы: вызов APIwx.redirectTo
- Возврат страницы: вызов APIwx.navigateBack
- Откройте другой апплет: вызовите APIwx.navigateToMiniProgram
- Вернемся к предыдущему апплету: вызов APIwx.navigateBackMiniProgram
cml использовать маршрутизацию
В соответствии с URI универсального индекса ресурсов адаптивно открывайте один и тот же маршрут PATH в разных средах:
- Откройте новую страницу: вызовите chameleon-apicml.navigateTo
- Перенаправление страницы: вызовите chameleon-apicml.redirectTo
- Возврат страницы: вызов chameleon-apicml.navigateBack
- Откройте другое перекрестное приложение: вызовите chameleon-api.cml.open
- Вернитесь к предыдущему кросс-энд-приложению: вызовите chameleon-apicml.close
Как зарегистрироваться
Как зарегистрироваться в программе
Процедура регистрации мини-программы
В проекте апплетаApp()
Функция используется для регистрации апплета. принять одинObject
Параметры, определяющие обратный вызов жизненного цикла апплета и т. д.
образец кода
App({
onLaunch(options) {
// Do something initial when launch.
},
globalData: 'I am global data'
})
программа регистрации cml
образец кода
<script>
import store from '../store/index.js'
import routerConfig from '../router.config.json';
class App {
data = {
store,
routerConfig
}
created(res) {
}
}
export default new App();
</script>
Осторожно вы найдете,
в апплетеapp.json app.js app.wxss
иsrc/app/app.cml
Соответствующее соотношение выглядит следующим образом
апплет app.js | cml проект src/app/app.cml |
---|---|
app.js | <script></script> |
app.wxss | <style></style> |
app.json | <script cml-type="json"></script> |
Как зарегистрировать страницу
Мини-страница регистрации программы
В проекте апплетаPage(Object)
Функция используется для регистрации страницы. принять одинObject
Типовые параметры, которые определяют исходные данные страницы, обратные вызовы жизненного цикла, обработчики событий и т. д.
Образец кода:
// index.js
Page({
data: {
text: 'This is page data.'
},
changeText: function(e) {
// sent data change to view
this.setData({
text: 'CML'
})
}
})
cml-страница регистрации
образец кода
<script>
class Index {
data = {
text: 'Chameleon'
}
methods = {
changeText: function(e) {
// sent data change to view
this.text = 'CML';
}
}
computed = {}
watch = {}
};
export default new Index();
</script>
Как зарегистрировать компоненты
Компонент регистрации мини-программы
В проекте апплетаComponent(Object)
Конструкторы можно использовать для определения компонентов, вызываяComponent
Конструктор может указывать свойства, данные, методы и т. д. компонента.
образец кода
Component({
properties: {
myProperty: { // 属性名
type: String, // 类型(必填)
value: '' // 属性初始值(可选)
},
myProperty2: String // 简化的定义方式
},
data: {
text: ''
}, // 私有数据,可用于模板渲染
// 生命周期函数,可以为函数,或一个在methods段中定义的方法名
attached() { },
ready() { },
methods: {
onMyButtonTap() {
this.setData({
// 更新属性和数据的方法与更新页面数据的方法类似
text: 'wx'
})
}
}
})
компонент реестра cml
образец кода
<script>
class MyComponent {
props = {
myProperty: { // 属性名
type: String, // 类型(必填)
default: '' // 属性初始值(可选)
},
myProperty2: String // 简化的定义方式
}
data = {
text: ''
} // 私有数据,可用于模板渲染
beforeMount() {}
mounted() {}
methods = {
onMyButtonTap() {
this.text = 'cml'
}
}
computed = {}
watch = {}
};
export default new MyComponent();
</script>
Как объявить жизненный цикл
Унификация определения жизненного цикла приложения на каждом конце является важным компонентом кросс-энд фреймворка, а также единственным способом миграции.
жизненный цикл объявления апплета
допустимыйApp(Object)
,Page(Object)
,Component(Object)
входящийObject
параметр, который указывает обратный вызов жизненного цикла апплета и т. д.
пример кода
// index.js
Page({
onLoad(options) {
// Do some initialize when page load.
},
onReady() {
// Do something when page ready.
},
onShow() {
// Do something when page show.
},
onHide() {
// Do something when page hide.
},
onUnload() {
// Do something when page close.
},
onShareAppMessage() {
// return custom share data when user share.
}
})
Жизненный цикл объявления cml
существует.cml
документ<script />
Экземпляр объекта, возвращаемый блоком кода, определяющим обратный вызов жизненного цикла.
образец кода
<script>
class Index {
beforeCreate(query) {
// data数据挂载到this根节点上之前,以及methods所有方法挂载到实例根节点之前
// 注意:只用页面的 beforeCreate钩子 会返回页面query
console.log('App beforeCreate: 打开当前页面路径中的参数是 ', query)
}
created() {
// data,methods里面的这些events挂载完成
console.log('App created')
}
beforeMount() {
// 开始挂载已经编译完成的cml到对应的节点时
console.log('App beforeMount')
}
mounted() {
// cml模板编译完成,且渲染到dom中完成,在整个生命周期中只执行一次
console.log('App mounted')
}
beforeDestroy() {
// 实例销毁前
console.log('App beforeDestroy')
}
destroyed() {
// 实例销毁后
console.log('App destroyed')
}
};
export default new Index();
</script>
Картирование жизненного цикла приложения
Апплетыapp.js
Жизненный цикл в -> cmlsrc/app/app.cml
Апплеты | chameleon |
---|---|
onLaunch | beforeCreate |
onShow | mounted |
onHide | destroyed |
Отображение жизненного цикла страницы
АпплетыPage()
Жизненный цикл в -> cmlsrc/pages/mypage/mypage.cml
Апплеты | chameleon |
---|---|
onLoad | beforeCreate |
onShow | mounted |
onUnload | destroyed |
onReady | Полиморфизм жизненного цикла |
onHide | Полиморфизм жизненного цикла |
onShareAppMessage | Полиморфизм жизненного цикла |
Отображение жизненного цикла компонентов
АпплетыComponent()
Жизненный цикл в -> cmlsrc/components/mycomponent/mycomponent.cml
Апплеты | chameleon |
---|---|
created | created |
attached | beforeMount |
ready | mounted |
detached | destroyed |
Сводка жизненного цикла
каждыйcml
пример (App
,Page
,Component
) пройти ряд процессов инициализации при его создании ——
Например, вам нужно настроить мониторинг данных, скомпилировать шаблоны и смонтировать экземпляры вCML节点
и обновлять при изменении данныхCML节点
Ждать. В то же время во время этого процесса также запускаются некоторые функции, называемые хуками жизненного цикла, что дает разработчикам возможность добавлять собственный код на разных этапах.
cml
заApp
,页面Page
,组件Component
Предоставляет ряд событий жизненного цикла для обеспечения упорядоченного выполнения приложений.
Кроме того, если вы хотите использовать определенный конечный жизненный цикл, вы можете использовать его с точки зрения бизнеса.Полиморфизм жизненного цикла.
Как данные реагируют на представления
Сегодня двусторонняя привязка данных и односторонний поток данных проникли в повседневную жизнь разработчиков, а режим разработки MVMM является стандартной структурой.
привязка данных,условный рендеринг,Рендеринг спискаКак это написано?
образец кода
Апплет отвечает данными
<!--wxml-->
<view class="scroller-wrap">
<!--数据绑定-->
<view>{{message}}</view>
<!--条件渲染-->
<view wx:if="{{view == 'WEBVIEW'}}">WEBVIEW</view>
<view wx:elif="{{view == 'APP'}}">APP</view>
<view wx:else="{{view == 'MINA'}}">MINA</view>
<!--列表渲染-->
<view wx:for="{{array}}" wx:for-index="index" wx:for-item="item">{{item}}</view>
</view>
// page.js
Page({
data: {
message: 'Hello MINA!',
view: 'MINA',
array: [1, 2, 3, 4, 5]
},
onLoad() {
this.setData({
message: 'wx'
})
}
})
cml отвечает данными
<template>
<!--index.cml-->
<view class="scroller-wrap">
<!--数据绑定-->
<view>{{message}}</view>
<!--条件渲染-->
<view c-if="{{view == 'WEBVIEW'}}">WEBVIEW</view>
<view c-else-if="{{view == 'APP'}}">APP</view>
<view c-else="{{view == 'MINA'}}">MINA</view>
<!--列表渲染-->
<view c-for="{{array}}" c-for-index="index" c-for-item="item">{{item}}</view>
</view>
</template>
<script>
class Index {
data = {
message: 'Hello MINA!',
view: 'MINA',
array: [1, 2, 3, 4, 5]
}
beforeCreate () {
this.message = 'cml'
}
};
export default new Index();
</script>
Сводка ответов данных
cml
Среда выполнения предоставляет кросс-конечную реагирующую систему привязки данных (привязка данных).При изменении данных необходимо изменить только данные на логическом уровне, и слой представления будет обновлен соответствующим образом.
просто нужноview<-->model
Интерактивная часть логики с простой миграцией может превратить ее в кросс-многотерминальную систему ответа на данные.
событие взаимодействия
cml
поддерживать некоторые основныесобытие, чтобы обеспечить эффект каждого конца (类型
,绑定
,事件对象
) работает стабильно.
образец кода
событие использования апплета
<!--wxml-->
<view id="tapTest" data-hi="WeChat" bindtap="tapName">Click me!</view>
// page.js
Page({
tapName(event) {
console.log(event)
}
})
событие использования cml
<template>
<view id="tapTest" data-hi="WeChat" c-bind:tap="tapName">
<text>Click me!</text>
</view>
</template>
<script>
class Index {
methods = {
tapName(e) {
// 打印事件对象
console.log('事件对象:', e);
}
}
}
export default new Index();
</script>
Сводка по использованию события
В то же время он также поддерживаетпользовательское событие, для связи между родительским и дочерним компонентами.
Кроме того, если вы хотите использовать стороннее событие,cml
Это не ограничит вашу бесплатную игру, вы можете использовать ее в коммерческих целях.полиморфизм компонентовилиполиморфизм интерфейсаДифференцированные функции реализации.
компоновка и внешний вид
Описание каждого конца布局和外观
изКаскадные таблицы стилей (CSS)Реализации различаются, включая, помимо прочего,布局
,盒模型
,定位
,文本
.
так,cml
рама встроеннаяБазовый стиль кросс-конечной согласованностиспособность.
И определяет спецификацию стиля, используемую для описания страницы.CMSS(Chameleon Style Sheet).
Как импортировать внешние стили
использовать@import
оператор может импортировать внешние таблицы стилей,@import
Далее следует относительный путь к внешней таблице стилей, которую необходимо импортировать, с;
Указывает конец оператора.
Мини-программа импортирует внешние стили
Образец кода:
/** common.wxss **/
.small-p {
padding:5px;
}
/** app.wxss **/
@import "common.wxss";
.middle-p {
padding:15px;
}
cml импортировать внешние стили
Образец кода:
/** common.css **/
.small-p {
padding: 5px;
}
<!-- app.cml -->
<style>
@import './common.css';
.middle-p {
padding:15 cpx;
}
</style>
Сводка по использованию стиля
В то же время, чтобы унифицировать единицы размера для нескольких терминалов, эффект рендеринга согласован, а страница имеет адаптивный макет.cml
Единое внедрение проектаcpxВ качестве единицы размера предусмотрено, что в качестве стандарта используется экран 750px (полноэкранный) визуальный рисунок.
Более того, способность каждой боковой таблицы стилей иметьне совсем, является одной из основных позиций для миграции проекта.
Кроме того, если вы хотите использовать стили, специфичные для сторон,cml
Это не ограничит вашу бесплатную игру, вы можете использовать ее в коммерческих целях.полиморфизм стиля
Примечание. Поскольку приложение-хамелеон является многотерминальнымweb native 小程序
рамка, при необходимости поперекnative
, необходимо использоватьflexboxСделай макет стиля! ! !
компоненты
cml
Все в проекте является компонентом. Компонент является базовой единицей представления.
Фреймворк предоставляет разработчикам наборосновные компоненты, разработчики могут комбинировать этиосновные компонентыЗаймитесь быстрым развитием.
как:
<template>
<view>
<view>view 基础组件</view>
<text>text 基础组件</text>
</view>
</template>
в то же время,cml
Поддержка краткого программирования компонентов.
пользовательский компонент
Разработчики могут абстрагировать функциональные модули на страницах в настраиваемые компоненты для повторного использования на разных страницах. Пользовательские компоненты очень похожи на базовые компоненты при использовании.
Как создавать пользовательские компоненты
Апплеты создают пользовательские компоненты
Пример кода:
Component({
properties: {
// 这里定义了innerText属性,属性值可以在组件使用时指定
innerText: {
type: String,
value: 'default value',
}
},
data: {
// 这里是一些组件内部数据
someData: {}
},
methods: {
// 这里是一个自定义方法
customMethod() {}
}
})
cml создать пользовательский компонент
образец кода
<script>
class MyComponent {
props = {
// 这里定义了innerText属性,属性值可以在组件使用时指定
innerText: {
type: String,
value: 'default value',
}
}
data = {
// 这里是一些组件内部数据
someData: {}
}
methods = {
// 这里是一个自定义方法
customMethod() {}
}
computed = {}
watch = {}
};
export default new MyComponent();
</script>
Как использовать пользовательские компоненты
Прежде чем использовать зарегистрированный пользовательский компонент, сначала сделайте объявление ссылки. На этом этапе вам необходимо указать имя тега каждого пользовательского компонента и соответствующий путь к файлу пользовательского компонента.
Апплеты используют пользовательские компоненты
Пример кода:
существуетpage.json
сделать справочное заявление в
{
"usingComponents": {
"component-tag-name": "path/to/the/custom/component"
}
}
существуетpage.wxml
используется в
<view>
<!-- 以下是对一个自定义组件的引用 -->
<component-tag-name inner-text="Some text"></component-tag-name>
</view>
cml с использованием пользовательских компонентов
Пример кода:
существуетpage.cml
середина<script cml-type='json' />
сделать справочное заявление
<script cml-type="json">
{
"base": {
"usingComponents": {
"component-tag-name": "path/to/the/custom/component"
}
}
}
</script>
существуетpage.cml
середина<template />
использовать
<template>
<view>
<!-- 以下是对一个自定义组件的引用 -->
<component-tag-name inner-text="Some text"></component-tag-name>
</view>
</template>
Как реализовать связь событий между родительским и дочерним компонентами
Система событий является одним из основных средств связи между компонентами. Пользовательские компоненты могут запускать произвольныесобытие, страница, ссылающаяся на компонент, может прослушивать эти события.
связь компонента апплета
Пример кода:
<!-- 页面 page.wxml -->
<view>
<my-component bindcustomevent="onMyEvent"></my-component>
</view>
// 页面 page.js
Page({
methods: {
onMyEvent(e) {
console.log(e.detail) // 自定义组件触发事件时提供的detail对象
}
}
})
<!-- 组件 my-component.wxml -->
<view>
<button bindtap="onTap">点击这个按钮将触发“myevent”事件</button>
</view>
// 组件 my-component.js
Component({
methods: {
onTap() {
this.triggerEvent('customevent', {}) // 触发 自定义组件事件
}
}
})
Связь компонента cml
Пример кода:
<!-- 页面 page.cml -->
<template>
<view>
<my-component c-bind:customevent="onMyEvent"></my-component>
</view>
</template>
<script>
class Index {
methods = {
// 这里是一个自定义方法
onMyEvent(e) {
console.log(e.detail) // 自定义组件触发事件时提供的detail对象
}
}
};
export default new Index();
</script>
<script cml-type="json">
{
"base": {
"usingComponents": {
"my-component": "path/to/the/custom/component"
}
}
}
</script>
<!-- 页面 path/to/the/custom/component.cml -->
<template>
<view>
<button c-bind:tap="onTap">点击这个按钮将触发“myevent”事件</button>
</view>
</template>
<script>
class MyComponent {
methods = {
// 这里是一个自定义方法
onTap() {
this.$cmlEmit('customevent', {}) // 触发 自定义组件事件
}
}
};
export default new MyComponent();
</script>
<script cml-type="json">
{}
</script>
Сводка по использованию компонентов
Как апплет,cml框架
обеспечивает многоВстроенные компонентыиКомпоненты расширения, сглаживая различия между несколькими терминалами, чтобы разработчики могли создавать мощные приложения, комбинируя эти компоненты.
Компоненты расширения необходимо вводить дополнительно. как:
<script cml-type="json">
{
"base": {
"usingComponents": {
"c-dialog": "cml-ui/components/c-dialog/c-dialog"
}
}
}
</script>
в исполненииcml build
При сборке пакетаcml 框架
Упомянутые встроенные компоненты и компоненты расширения будут упакованы по запросу, чтобы уменьшить размер кода.
Встроенные компонентыиКомпоненты расширенияВсе они поддерживают кросс-мультитерминал.Для некоторых компонентов, которые не предусмотрены на определенном терминале, можно передатьполиморфизм компонентовреализовать.
Если вы хотите использовать нативные компоненты на стороне апплета, вы можете добавить нативную метку передorigin-*
,cml
Фреймворк будет отображать нативные компонентыСсылаться на
Уведомление:origin-*
только вфайл в градациях серогов использовании! !
как вmap.wx.cml
Используйте собственный компонент карты в файле<map/>
:
<!-- map.wx.cml -->
<template>
<origin-map
id="map"
longitude="113.324520"
latitude="23.099994"
controls="{{controls}}"
bindcontroltap="controltap"
style="width: 100%; height: 300px;"
></origin-map>
</template>
Как вызвать возможности интерфейса платформы
В апплете вы можете использовать родной WeChatAPI
, такие как получение информации о пользователе, локальное хранилище, платежные функции и т. д.
образец кода
try {
wx.setStorageSync('name', 'Hanks')
} catch (e) {
console.error(e)
}
Точно так же в проекте cml это можно вызвать так:
образец кода
import cml from 'chameleon-api'
cml.setStorage('name', 'Hanks').then((res)=>{
console.log(res)
},function(e){
console.error(e)
})
Сводка по использованию интерфейса
cml
Платформа предоставляет множество полиморфных интерфейсов, которые могут вызывать собственные возможности, предоставляемые каждым концом, такие как системная информация, информация об узлах элементов, эффекты анимации, локальное хранилище, сетевые запросы, географические местоположения и т. д. Пожалуйста, обратитесь кAPIдокументация.
chameleon-api
Все предоставленные интерфейсы поддерживаются на нескольких терминалах.Для некоторых собственных интерфейсов определенного терминала, которые не предоставляются, вы можете передатьполиморфизм интерфейсазвонить.
Перенести экземпляр
нижеприведенный各端(vue、weex、小程序)迁移cml指南
а такжеcml 导出组件到各端指南
Конкретная документация по миграции для: