# Core

所有的 Model 都是以物件的型態存在,必須透過 Alas Core 的魔法才能賦予 Model 生命。

const alas = new Alas({
    // 用於辨識用的命名
    name: 'my first alas core',
    // 註冊 Container,相關文件可直接參照後續的 Container 章節
    containers: { /* Containers */ },
    // 註冊 Package,相關文件可直接參照後續的 Packages 章節
    packages: [ /* Packages */ ]
})

# Types

實體化 Alas 的過程中可以透過泛型的第一個參數引入 Containers,此後所有經由 Alas 的物件皆會綁定 TS 型態。

import Alas, { ContainerStructure } from 'alas'
type Containers = {
    [key: string]: ContainerStructure
}
const alas = new Alas<Containers>({ ... })

# Static

# utils

方便開發用的工具組,可以參考 Utils 章節。

  • type: Utils

# Model

Model Constructor,提供給需要進行擴展的開發人員使用。

  • type: Model

# List

List Constructor,提供給需要進行擴展的開發人員使用。

  • type: List

# Dictionary

Dictionary Constructor,提供給需要進行擴展的開發人員使用。

  • type: Dictionary

# ListenerGroup

建立一組管理 Listener 的物件,協助統一監聽與清除的功能。

  • type: ListenerGroup
Example
import Alas from 'alas'
let listenerGroup = new Alas.ListenerGroup()
let alas = new Alas()
// 觸發對象的 on 或是 $on,對象可以是 Model、List、Dictionary、Main、Status、Loader
listenerGroup.add(alas, 'makedModel', () => { ... })
listenerGroup.add(alas, 'makedList', () => { ... })
// 移除所有事件監聽
listenerGroup.close()

# MsPackage

預設包 Ms Package 的物件,可以藉由拓展此物件來增加 Ms Package 的語系支援範圍。

  • type: PackageOptions

由於是純物件,這裡提供一組擴展思路:

import Alas from 'alas'
Alas.MsPackage.locales['ja'] = {
    'number': '数'
}

# Property

# name

Core 的名稱。

  • type: string

# utils

方便開發用的工具組,可以參考 Utils 章節。

  • type: Utils

# Methods

# addModel

在 Global Container 註冊一個 Model,透過這支 API,Model 會被統一註冊進入一個 * Container。

alas.addModel = function(modelName: string, options: ModelOptions) => void

警告

不建議使用,主要是為了展示時使用的方法。

Example
alas.addModel('user', {
    body: {
        name: []
    }
})
const user = alas.make('*', 'user')

# addContainer

註冊 Container。

alas.addContainer = function(name: string, options: ContainerOptions) => void

警告

不建議使用,請在實體化透過 Constructor 註冊,以提升 TS 的準確性。

# addPackage

註冊 Package。

alas.addPackage = function(options: PackageOptions) => void

警告

不建議使用,請在實體化透過 Packages 註冊,以提升 TS 的準確性。

# make

實體化 Model。

alas.make = function(containerName: string, modelName: string, options?: { save?: boolean }) => Model

# makeList

建立指定的 Model List。

alas.makeList = function(containerName: string, modelName: string, options?: { save?: boolean }) => List

# makeDictionary

建立指定的 Model Dictionary。

alas.makeDictionary = function(containerName: string,, modelName: string,, options?: { save?: boolean }) => Dictionary

# setLocale

設定整個系統呈現的語系,預設為 en-us

alas.setLocale = function(locale: string) => void

# meg

顯示預設好的訊息,訊息會隨著現在定義的語系呈現。

alas.meg = function(key: string, params?: { [key: string]: any }) => string

# registerStatus

建立一個託管多個物件的 Status。

alas.registerStatus = function(name: string, options: StatusOptions) => Status
Example
const status = alas.registerStatus('my-status', {
    states: {
        user: () => alas.make('*', 'user')
    },
    loaders: {
        async fetchUser(status, done, fail, { username }) {
            try {
                let { data } = await axios.get(`users/${username}`)
                status.fetch('user').$init(data)
                done()
            } catch (error) {
                fail(error)
            }
        }
    }
})

# instanceof

檢查物件是否來自指定 Model,只要來源相同,不論是 List 或是 Dictionary 皆會回傳 true

alas.instanceof = function(containerName: string, modelName: string, data: any) => Boolean
Example
const status = alas.registerStatus('my-status', {
    states: {
        user: () => alas.make('*', 'user')
    },
    loaders: {
        async fetchUser(status, done, fail, { username }) {
            try {
                let { data } = await axios.get(`users/${username}`)
                status.fetch('user').$init(data)
                done()
            } catch (error) {
                fail(error)
            }
        }
    }
})

# rules

回傳驗證的方法組合,便於使用某些自定義的驗證規則。

alas.rules = function(rules: string[]) => Array<Function>
Example
let verifyNumber = (data) => {
    let rules = alas.rules(['#ms.required', '#ms.number'])
    for (let rule of rules) {
        let result = rule(data)
        if (result !== true) {
            return false
        }
    }
    return true
}
console.log(verifyNumber(1)) // true

# on

監聽一個事件。

alas.on = function(eventName: string, callback: EventCallback) => string
  • return: listener id

# once

監聽一個事件,但觸發一次即結束。

alas.once = function(eventName: string, callback: EventCallback) => string
  • return: listener id

# off

alas.off = function(eventName: string, listenerId: string) => void

# Events

提示

Core Event是屬於系統單方面發送,不存在 emit 方法。

# makedModel

建立 model 可以被獲取到。

alas.on('makedModel', (alas: Core, context: { id: string }, model: Model) => { ... })

# makedList

剛剛建立出來的 list 可以被獲取到。

alas.on('makedList', (alas: Core, context: { id: string }, list: List) => { ... })

# makedDictionary

剛剛建立出來的 dictionary 可以被獲取到。

alas.on('makedDictionary', (alas: Core, context: { id: string }, dictionary: Dictionary) => { ... })

# registeredStatus

剛剛建立出來的 status 可以被獲取到。

alas.on('registeredStatus', (alas: Core, context: { id: string }, status: Status) => { ... })