xinglie / xinglie.github.io

blog
https://xinglie.github.io
153 stars 22 forks source link

让magix支持class写法 #92

Open xinglie opened 2 years ago

xinglie commented 2 years ago

为什么默认不支持

简言之,class写法比magix提供的extend写法要输入更多字符,没有明显的开发上的优势,而且开发者写class或对象字面量并无本质区别,再加上class诸多语法现阶段并不稳定,故默认支持更稳定的对象字面量的写法

如何让magix支持class写法

通过decorator来间接支持 magix需要提供一个abstract class以支持vscode进行提示,如

abstract class View{
  id:string
  render():void | Promise<any>
}

提供 magixViewdecorator方法,如

let magixView = (BaseView, tmpl = null) => {
    return fn => {
        let temp = {
            tmpl
        };
        let keys = Reflect.ownKeys(fn.prototype);
        for (let k of keys) {
            if (k != 'constructor') {
                temp[k] = fn.prototype[k];
            }
        }
        return BaseView.extend(temp) as typeof fn;
    };
}

使用

@magixView(Magix5.View)
class A extends View {
    test() {

    }
}
@magixView(A)
class B extends A {
    'event<click>'(e) {
        console.log(e)
    }
}

@magixView(B, '@:./1.html')
export default class extends B {
    go(){

    }
}