国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

cml遷移指南(CML Migrate Guide)

FreeZinG / 1977人閱讀

摘要:今天,為了讓大家的項(xiàng)目優(yōu)雅升級,快速接入,給你帶來一份豐盛的遷移指南目錄結(jié)構(gòu)和微信小程序一樣,包含一個(gè)描述整體程序的和多個(gè)描述各自頁面的。

cml 作為真正讓一套代碼運(yùn)行多端的框架,提供標(biāo)準(zhǔn)的MVVM模式,統(tǒng)一開發(fā)各類終端。

同時(shí),擁有各端獨(dú)立的 運(yùn)行時(shí)框架(runtime)數(shù)據(jù)管理(store)組件庫(ui)接口(api)

此外,cml在跨端能力加強(qiáng)能力統(tǒng)一表現(xiàn)一致等方面做了許多工作。

今天,為了讓大家的項(xiàng)目優(yōu)雅升級,快速接入,給你帶來一份豐盛的cml遷移指南~

目錄結(jié)構(gòu)

和微信小程序一樣,cml 包含一個(gè)描述整體程序的 app 和多個(gè)描述各自頁面的 page

小程序目錄結(jié)構(gòu)
.
├── components // 包含各個(gè)組件
├── pages // 包含各個(gè)頁面
├── app.js // 包含各個(gè)組件
├── app.js  // 應(yīng)用啟動入口
├── app.json // 全局配置
├── app.wxss // 全局樣式
└── project.config.json // 項(xiàng)目配置文件
cml目錄結(jié)構(gòu)
.
├── dist // 各個(gè)端構(gòu)建結(jié)果
│   ├── alipay 
│   ├── baidu 
│   ├── wx 
│   ├── web  
│   ├── weex 
│   └── config.json // 跨端配置map映射表
├── node_modules // 第三方庫
├── mock // 模擬 接口數(shù)據(jù) 和 模板數(shù)據(jù)
├── src  // 源代碼開發(fā)目錄
│   ├── app // 應(yīng)用啟動入口
│   ├── assets // 靜態(tài)資源
│   ├── components // 包含組件
│   ├── pages  // 包含頁面
│   ├── store //數(shù)據(jù)管理
│   └── router.config.json // 路由配置文件
├── chameleon.config.js // 項(xiàng)目配置文件
└── package.json // npm包配置文件
如何修改配置

在小程序項(xiàng)目里面,分為:

小程序 —— 項(xiàng)目配置

可以在項(xiàng)目根目錄使用 project.config.json 文件對項(xiàng)目進(jìn)行配置。

配置示例:

{
  "miniprogramRoot": "./src",
  "debugOptions": {}
}
小程序 —— 全局配置

小程序根目錄下的 app.json 文件用來對微信小程序進(jìn)行全局配置,決定頁面文件的路徑、窗口表現(xiàn)、設(shè)置網(wǎng)絡(luò)超時(shí)時(shí)間、設(shè)置多 tab 等

配置示例:

{
  "pages": ["pages/index/index", "pages/logs/index"],
  "window": {
    "navigationBarTitleText": "Demo"
  },
  "networkTimeout": {
    "request": 10000,
    "downloadFile": 10000
  }
}
小程序 —— 頁面配置

每一個(gè)小程序頁面也可以使用 .json 文件來對本頁面的窗口表現(xiàn)進(jìn)行配置。

頁面的配置只能設(shè)置 app.json 中部分 window 配置項(xiàng)的內(nèi)容,頁面中配置項(xiàng)會覆蓋 app.jsonwindow 中相同的配置項(xiàng)。

配置示例:

{
  "navigationBarBackgroundColor": "#ffffff",
  "navigationBarTextStyle": "black",
  "navigationBarTitleText": "微信接口功能演示",
  "backgroundColor": "#eeeeee",
  "backgroundTextStyle": "light"
}

同樣,在 cml項(xiàng)目里面,分為:

cml —— 項(xiàng)目配置

chameleon.config.js 為項(xiàng)目的配置文件,你可以定制化構(gòu)建,比如是否帶hash,是否壓縮等等。

配置示例:

// 設(shè)置靜態(tài)資源的線上路徑
const publicPath = "http://www.static.chameleon.com/static";
// 設(shè)置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 項(xiàng)目 app 目錄下的 app.cml 文件的 cml —— 頁面/組件配置

通過 usingComponents 配置 組件路徑 注冊引用的組件。

配置示例:

如何使用路由能力 小程序配置路由

app.json 配置項(xiàng)列表的 pages 字段用于指定小程序由哪些頁面組成,每一項(xiàng)都對應(yīng)一個(gè)頁面的 路徑+文件名 信息。

數(shù)組的第一項(xiàng)代表小程序的初始頁面(首頁)。新增/減少頁面,需要對 pages 數(shù)組進(jìn)行修改。

如果項(xiàng)目有 pages/index/index.wxmlpages/logs/logs.wxml 兩個(gè)頁面,則需要在 app.json 中寫

{
  "pages": ["pages/index/index", "pages/logs/logs"]
}
cml配置路由

src/router.config.json 是路由的配置文件,cml 內(nèi)置了一套各端統(tǒng)一的路由管理方式。相應(yīng)有 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 文件進(jìn)行處理。

小程序使用路由

打開新頁面:調(diào)用 API wx.navigateTo

頁面重定向:調(diào)用 API wx.redirectTo

頁面返回:調(diào)用 API wx.navigateBack

打開另一個(gè)小程序:調(diào)用 API wx.navigateToMiniProgram

返回到上一個(gè)小程序:調(diào)用 API wx.navigateBackMiniProgram

cml使用路由

依據(jù)統(tǒng)一資源索引URI,自適應(yīng)打開不同環(huán)境同一路由PATH:

打開新頁面:調(diào)用 chameleon-api cml.navigateTo

頁面重定向:調(diào)用 chameleon-api cml.redirectTo

頁面返回:調(diào)用 chameleon-api cml.navigateBack

打開另一個(gè)跨端應(yīng)用:調(diào)用 chameleon-api cml.open

返回到上一個(gè)跨端應(yīng)用:調(diào)用 chameleon-api cml.close

如何注冊 如何注冊程序 小程序注冊程序

在小程序項(xiàng)目里面,App() 函數(shù)用來注冊一個(gè)小程序。接受一個(gè) Object 參數(shù),其指定小程序的生命周期回調(diào)等。

示例代碼

App({
  onLaunch(options) {
    // Do something initial when launch.
  },
  globalData: "I am global data"
})
cml注冊程序

示例代碼

細(xì)心的你會發(fā)現(xiàn),

小程序中app.json app.js app.wxsssrc/app/app.cml的對應(yīng)關(guān)系如下

小程序 app.js cml項(xiàng)目 src/app/app.cml
app.js
app.wxss
app.json
如何注冊頁面 小程序注冊頁面

在小程序項(xiàng)目里面,Page(Object) 函數(shù)用來注冊一個(gè)頁面。接受一個(gè) Object 類型參數(shù),其指定頁面的初始數(shù)據(jù)、生命周期回調(diào)、事件處理函數(shù)等。

示例代碼:

// index.js
Page({
  data: {
    text: "This is page data."
  },
  changeText: function(e) {
    // sent data change to view
    this.setData({
      text: "CML"
    })
  }
})
cml注冊頁面

示例代碼

如何注冊組件 小程序注冊組件

在小程序項(xiàng)目里面,
Component(Object) 構(gòu)造器可用于定義組件,調(diào)用 Component 構(gòu)造器時(shí)可以指定組件的屬性、數(shù)據(jù)、方法等。

示例代碼

Component({
  properties: {
    myProperty: { // 屬性名
      type: String, // 類型(必填)
      value: "" // 屬性初始值(可選)
    },
    myProperty2: String // 簡化的定義方式
  },
  data: {
    text: ""
  }, // 私有數(shù)據(jù),可用于模板渲染

  // 生命周期函數(shù),可以為函數(shù),或一個(gè)在methods段中定義的方法名
  attached() { }, 
  ready() { },
  methods: {
    onMyButtonTap() {
      this.setData({
        // 更新屬性和數(shù)據(jù)的方法與更新頁面數(shù)據(jù)的方法類似
        text: "wx"
      })
    }
  }
})
cml注冊組件

示例代碼

如何聲明生命周期

統(tǒng)一各端應(yīng)用生命周期的定義,是跨端框架的重要組成,也是遷移的必經(jīng)之路。

小程序聲明生命周期

可以在 App(Object)Page(Object)Component(Object) 傳入Object參數(shù),其指定小程序的生命周期回調(diào)等

代碼示例

// 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 文件 App 生命周期 映射

小程序 app.js中的生命周期 -> cml src/app/app.cml

小程序 chameleon
onLaunch beforeCreate
onShow mounted
onHide destroyed
Page 生命周期 映射

小程序 Page()中的生命周期 -> cml src/pages/mypage/mypage.cml

小程序 chameleon
onLoad beforeCreate
onShow mounted
onUnload destroyed
onReady 生命周期多態(tài)
onHide 生命周期多態(tài)
onShareAppMessage 生命周期多態(tài)
Component 生命周期 映射

小程序 Component()中的生命周期 -> cml src/components/mycomponent/mycomponent.cml

小程序 chameleon
created created
attached beforeMount
ready mounted
detached destroyed
生命周期總結(jié)

每個(gè) cml 實(shí)例(AppPageComponent)在被創(chuàng)建時(shí)都要經(jīng)過一系列的初始化過程 ————

例如,需要設(shè)置數(shù)據(jù)監(jiān)聽、編譯模板、將實(shí)例掛載到 CML節(jié)點(diǎn) 并在數(shù)據(jù)變化時(shí)更新 CML節(jié)點(diǎn) 等。同時(shí)在這個(gè)過程中也會運(yùn)行一些叫做生命周期鉤子的函數(shù),這給開發(fā)者在不同階段添加自己的代碼的機(jī)會。

cmlApp頁面Page組件Component 提供了一系列生命周期事件,保障應(yīng)用有序執(zhí)行。

另外,如果你想使用某個(gè)端特定的生命周期,你可以從業(yè)務(wù)出發(fā)使用 生命周期多態(tài)。

數(shù)據(jù)如何響應(yīng)到視圖

如今,雙向數(shù)據(jù)綁定&單向數(shù)據(jù)流 已深入開發(fā)者日常,MVMM開發(fā)模式算是框架標(biāo)配。

數(shù)據(jù)綁定、條件渲染、列表渲染 是如何書寫的呢?

示例代碼

小程序使用數(shù)據(jù)響應(yīng)


    
  {{message}}
  
  WEBVIEW
  APP
  MINA
    
  {{item}}
// page.js
Page({
  data: {
    message: "Hello MINA!",
    view: "MINA",
    array: [1, 2, 3, 4, 5]
  },
  onLoad() {
    this.setData({
      message: "wx"
    })
  }
})
cml使用數(shù)據(jù)響應(yīng)

數(shù)據(jù)響應(yīng)總結(jié)

cml運(yùn)行時(shí)框架 提供了跨端響應(yīng)式數(shù)據(jù)綁定系統(tǒng)(Data binding),當(dāng)做數(shù)據(jù)修改的時(shí)候,只需要在邏輯層修改數(shù)據(jù),視圖層就會做相應(yīng)的更新。

只需要將 view<-->model 交互部分邏輯,作簡單遷移,便可使它成為跨多端的數(shù)據(jù)響應(yīng)系統(tǒng)。

事件交互

cml 支持一些基礎(chǔ)的事件,保障各端效果(類型綁定事件對象)一致運(yùn)行。

示例代碼

小程序使用事件

Click me!
// page.js
Page({
  tapName(event) {
    console.log(event)
  }
})
cml使用事件

事件使用總結(jié)

同時(shí),還支持自定義事件,用于父子組件之間的通信。

另外,如果你想要使用某個(gè)端特定的事件,cml 并不會限制你的自由發(fā)揮,你可以從業(yè)務(wù)出發(fā)使用 組件多態(tài) 或者 接口多態(tài) 差異化實(shí)現(xiàn)功能。

布局和外觀

各端描述 布局和外觀 的層疊樣式表(CSS)實(shí)現(xiàn)存在差異,包括不限于 布局盒模型定位文本

所以, cml 框架內(nèi)置跨端一致性基礎(chǔ)樣式能力。

并且,定義了用于描述頁面的樣式規(guī)范CMSS(Chameleon Style Sheet)。

如何導(dǎo)入外部樣式

使用 @import 語句可以導(dǎo)入外聯(lián)樣式表,@import 后跟需要導(dǎo)入的外聯(lián)樣式表的相對路徑,用 ; 表示語句結(jié)束。

小程序?qū)胪獠繕邮?/b>

示例代碼:

/** common.wxss **/
.small-p {
  padding:5px;
}
/** app.wxss **/
@import "common.wxss";
.middle-p {
  padding:15px;
}
cml導(dǎo)入外部樣式

詳細(xì)文檔

示例代碼:

/** common.css **/
.small-p {
  padding: 5px;
}

樣式使用總結(jié)

同時(shí),為了統(tǒng)一多端尺寸單位,呈現(xiàn)效果一致,同時(shí)頁面響應(yīng)式布局,cml 項(xiàng)目統(tǒng)一采用 cpx 作為尺寸單位,規(guī)定以屏幕750px(占滿屏幕)視覺稿作為標(biāo)準(zhǔn)。

而且,各端樣式表擁有的能力 不盡相同,是項(xiàng)目遷移的主要陣地之一。

另外,如果你想要使用某個(gè)端特定的樣式能力,cml 并不會限制你的自由發(fā)揮,你可以從業(yè)務(wù)出發(fā)使用 樣式多態(tài)

注意:由于chameleon應(yīng)用是 跨多端web native 小程序框架,如果需要跨native,必須使用 flexbox 進(jìn)行樣式布局!!!

組件

cml 項(xiàng)目一切皆組件。組件(Component)是視圖的基本組成單元。

框架為開發(fā)者提供了一系列基礎(chǔ)組件,開發(fā)者可以通過組合這些基礎(chǔ)組件進(jìn)行快速開發(fā)。

如:

同時(shí),cml 支持簡潔的組件化編程。

自定義組件

開發(fā)者可以將頁面內(nèi)的功能模塊抽象成自定義組件,以便在不同的頁面中重復(fù)使用。自定義組件在使用時(shí)與基礎(chǔ)組件非常相似。

如何創(chuàng)建自定義組件
小程序創(chuàng)建自定義組件

代碼示例:

Component({
  properties: {
    // 這里定義了innerText屬性,屬性值可以在組件使用時(shí)指定
    innerText: {
      type: String,
      value: "default value",
    }
  },
  data: {
    // 這里是一些組件內(nèi)部數(shù)據(jù)
    someData: {}
  },
  methods: {
    // 這里是一個(gè)自定義方法
    customMethod() {}
  }
})
cml創(chuàng)建自定義組件

示例代碼

如何使用自定義組件

使用已注冊的自定義組件前,首先要進(jìn)行引用聲明。此時(shí)需要提供每個(gè)自定義組件的標(biāo)簽名和對應(yīng)的自定義組件文件路徑。

小程序使用自定義組件

代碼示例:

page.json 中進(jìn)行引用聲明

{
  "usingComponents": {
    "component-tag-name": "path/to/the/custom/component"
  }
}

page.wxml 中使用


  
  
cml使用自定義組件

代碼示例:

page.cml

page.cml