在做后台管理系统的同学们,是否有用easyui的经历。虽然现在都是vue、ng、react的时代。但easyui(也就是jquery为基础)还是占有一席之地的。因为他对后端开发者太友好了,太熟悉不过了。要让一个后端开发者来理解vue或者是react的VNode、状态器、组件等,都是有那么一点点的为难(反正我转型时,对这些都是很有困惑的)。今天我想试着解决这样一个问题,如:将knockout 与 大家熟悉的easyui结合在一起。让easyui具有MVVM的能力,也有不使用easyui的特性,看大家是否喜欢这一口。
一、项目介绍说明项目语言:typescript
项目地址:https://gitee.com/ko-plugins/koeasyui
初级效果:
望大家给予评论和支持。
二、如何将easyui转换为ko的组件再前几年用ko的时候,由于他没有组件的支持(因为当时没有组件的概念)。至到react、vue提出和引用了组件的概念,以及将此概念深入到每个前端开发者的内心后。ko也提供了组件的支持。2017年看这个新特性的时候,就让我有改造easyui的冲突。当时苦于对ko和easyui的理解不深入,硬是没有找到突破口。今天终于让我找到。
2.1 easyui组件如何注册到为ko组件ko提供了components.register方法,用于注册一个组件。此方法接受一个字符串的名称,以及一个对象(至少包含一个template或viewModel属性),其中viewModel可以是一个对象,也就是一个function。本人就利用了可以为function这一点。根据easyui的组件名动态创建一个function,然后赋值给viewModel,代码片段如下:
let plugins = this.easyui.plugins; //动态生成一个function的类 plugins.forEach(pluginName => { let defaults = this.jquery.fn[pluginName].defaults; let methods = this.jquery.fn[pluginName].methods; if(defaults){ //options必须要是独立的,事件(放原型上),方法可以原型链上的 let props = Object.getOwnPropertyNames(defaults); //方法 let methodKeys = Object.getOwnPropertyNames(methods); this.option.ko.components.register(`ko-${pluginName}`,{ template: '<div></div>', viewModel: EasyuiHelper.createEasyui(props, methodKeys) }); } });