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

資訊專欄INFORMATION COLUMN

cml遷移指南(CML Migrate Guide)

FreeZinG / 1961人閱讀

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

cml 作為真正讓一套代碼運行多端的框架,提供標準的MVVM模式,統一開發各類終端。

同時,擁有各端獨立的 運行時框架(runtime)數據管理(store)、組件庫(ui)接口(api)

此外,cml在跨端能力加強、能力統一表現一致等方面做了許多工作。

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

目錄結構

和微信小程序一樣,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 文件用來對微信小程序進行全局配置,決定頁面文件的路徑、窗口表現、設置網絡超時時間、設置多 tab 等

配置示例:

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

每一個小程序頁面也可以使用 .json 文件來對本頁面的窗口表現進行配置。

頁面的配置只能設置 app.json 中部分 window 配置項的內容,頁面中配置項會覆蓋 app.jsonwindow 中相同的配置項。

配置示例:

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

同樣,在 cml項目里面,分為:

cml —— 項目配置

chameleon.config.js 為項目的配置文件,你可以定制化構建,比如是否帶hash,是否壓縮等等。

配置示例:

// 設置靜態資源的線上路徑
const publicPath = "http://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 文件的 cml —— 頁面/組件配置

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

配置示例:

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

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 文件進行處理。

小程序使用路由

打開新頁面:調用 API wx.navigateTo

頁面重定向:調用 API wx.redirectTo

頁面返回:調用 API wx.navigateBack

打開另一個小程序:調用 API wx.navigateToMiniProgram

返回到上一個小程序:調用 API wx.navigateBackMiniProgram

cml使用路由

依據統一資源索引URI,自適應打開不同環境同一路由PATH:

打開新頁面:調用 chameleon-api cml.navigateTo

頁面重定向:調用 chameleon-api cml.redirectTo

頁面返回:調用 chameleon-api cml.navigateBack

打開另一個跨端應用:調用 chameleon-api cml.open

返回到上一個跨端應用:調用 chameleon-api cml.close

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

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

示例代碼

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

示例代碼

細心的你會發現,

小程序中app.json app.js app.wxsssrc/app/app.cml的對應關系如下

小程序 app.js cml項目 src/app/app.cml
app.js
app.wxss
app.json
如何注冊頁面 小程序注冊頁面

在小程序項目里面,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注冊頁面

示例代碼

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

在小程序項目里面,
Component(Object) 構造器可用于定義組件,調用 Component 構造器時可以指定組件的屬性、數據、方法等。

示例代碼

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

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

示例代碼

如何聲明生命周期

統一各端應用生命周期的定義,是跨端框架的重要組成,也是遷移的必經之路。

小程序聲明生命周期

可以在 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 文件 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 生命周期多態
onHide 生命周期多態
onShareAppMessage 生命周期多態
Component 生命周期 映射

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

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

每個 cml 實例(App、Page、Component)在被創建時都要經過一系列的初始化過程 ————

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

cmlApp、頁面Page、組件Component 提供了一系列生命周期事件,保障應用有序執行。

另外,如果你想使用某個端特定的生命周期,你可以從業務出發使用 生命周期多態。

數據如何響應到視圖

如今,雙向數據綁定&單向數據流 已深入開發者日常,MVMM開發模式算是框架標配。

數據綁定、條件渲染、列表渲染 是如何書寫的呢?

示例代碼

小程序使用數據響應


    
  {{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使用數據響應

數據響應總結

cml運行時框架 提供了跨端響應式數據綁定系統(Data binding),當做數據修改的時候,只需要在邏輯層修改數據,視圖層就會做相應的更新。

只需要將 view<-->model 交互部分邏輯,作簡單遷移,便可使它成為跨多端的數據響應系統。

事件交互

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

示例代碼

小程序使用事件

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

事件使用總結

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

另外,如果你想要使用某個端特定的事件,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;
}

樣式使用總結

同時,為了統一多端尺寸單位,呈現效果一致,同時頁面響應式布局,cml 項目統一采用 cpx 作為尺寸單位,規定以屏幕750px(占滿屏幕)視覺稿作為標準。

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

另外,如果你想要使用某個端特定的樣式能力,cml 并不會限制你的自由發揮,你可以從業務出發使用 樣式多態

注意:由于chameleon應用是 跨多端web native 小程序框架,如果需要跨native,必須使用 flexbox 進行樣式布局?。。?/strong>

組件

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

框架為開發者提供了一系列基礎組件,開發者可以通過組合這些基礎組件進行快速開發。

如:

同時,cml 支持簡潔的組件化編程。

自定義組件

開發者可以將頁面內的功能模塊抽象成自定義組件,以便在不同的頁面中重復使用。自定義組件在使用時與基礎組件非常相似。

如何創建自定義組件
小程序創建自定義組件

代碼示例:

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

示例代碼

如何使用自定義組件

使用已注冊的自定義組件前,首先要進行引用聲明。此時需要提供每個自定義組件的標簽名和對應的自定義組件文件路徑。

小程序使用自定義組件

代碼示例:

page.json 中進行引用聲明

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

page.wxml 中使用


  
  
cml使用自定義組件

代碼示例:

page.cml

page.cml