UNPKG

avalon2

Version:

an elegant efficient express mvvm framework

81 lines (73 loc) 1.96 kB
import { avalon, platform, modern } from '../seed/core' import { $$skipArray } from './reserved' import { Action } from './Action' import './share' import './ProxyArray' export { avalon, platform } export function hideProperty(host, name, value) { Object.defineProperty(host, name, { value: value, writable: true, enumerable: false, configurable: true }) } function $fire(expr, a) { var list = this.$events[expr] if (Array.isArray(list)) { for (var i = 0, w; w = list[i++];) { w.callback.call(w.vm, a, w.value, w.expr) } } } function $watch(expr, callback, deep) { var core = this.$events var w = new Action(this, { deep: deep, type: 'user', expr: expr }, callback) if (!core[expr]) { core[expr] = [w] } else { core[expr].push(w) } return function() { w.dispose() avalon.Array.remove(core[expr], w) if (core[expr].length === 0) { delete core[expr] } } } export function watchFactory(core) { return $watch } export function fireFactory(core) { return $fire } export function afterCreate(vm, core, keys, bindThis) { var ac = vm.$accessors //隐藏系统属性 for (var key in $$skipArray) { hideProperty(vm, key, vm[key]) } //为不可监听的属性或方法赋值 for (let i = 0; i < keys.length; i++) { let key = keys[i] if (!(key in ac)) { if (bindThis && typeof core[key] === 'function') { vm[key] = core[key].bind(vm) continue } vm[key] = core[key] } } vm.$track = keys.join('☥') vm.$events.__proxy__ = vm } platform.fireFactory = fireFactory platform.watchFactory = watchFactory platform.afterCreate = afterCreate platform.hideProperty = hideProperty platform.createViewModel = Object.defineProperties