abstract class View{
id:string
render():void | Promise<any>
}
提供 magixView 的decorator方法,如
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(){
}
}
为什么默认不支持
简言之,
class
写法比magix
提供的extend
写法要输入更多字符,没有明显的开发上的优势,而且开发者写class
或对象字面量并无本质区别,再加上class
诸多语法现阶段并不稳定,故默认支持更稳定的对象字面量的写法如何让magix支持class写法
通过
decorator
来间接支持magix
需要提供一个abstract class
以支持vscode
进行提示,如提供
magixView
的decorator
方法,如使用