Files
electronTs-ks-demo/问题.txt
2024-09-27 01:23:51 +08:00

117 lines
5.9 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

【实现】问题4
修改@GET注解支持传入两个参数一个是请求地址一个是请求是否需要处理返回参数
【实现】问题1
1实现功能创建启动窗口
1配置文件中设置 StartPage = 'Home'
2Index.utils.ts 封装方法读取 StartPage ,根据 StartPage 参数自动载入对应的controller
2Init.run.ts 调用 对应方法创建窗体
2实现功能自动创建非启动窗口的其他窗口 (考虑通过装饰器实现)
1页面JS的渲染进程中触发 ipcRenderer
2Init.run.ts 中 实例化 application.ipc应用级ipc然后监听渲染进程的事件
3自动导入并创建渲染进程需要打开的窗口 controller
4窗口分为两种所以设计继续进行步骤 5 的思路规划
1独立的新窗口
2依赖主窗口的子窗口
5如果是依赖窗口需要知道子窗口所依赖的父窗口 BrowserWindow 对象是 Windows.model.ts 的哪个?
6所以需要在 Index.utils.ts 中封装方法根据 StartPage 参数自动 从 Windows.model.ts 寻找应用的主窗体,然后返回窗体
7在子窗体的设置 parent 属性,然后启动子窗体作为父窗体的子
未实现 3在controller类上实现注解 @Created(),实现 new BrowserWindo 和 loadFile 过程
【实现】问题2
功能需求:
electron 的 controller 中实现 render 函数
问题拆分:
1首先 controller 类中要定义 render 方法render 方法返回需要传递给模板引擎jade的数据对象
2在注解 CretedWindow 原本的步骤中是先根据类名自动载入配置文件实现了窗体的创建也就是,自动 new BrowserWindow 的过程
但是这个步骤是不对的!!
注意:而且 原本的 new BrowserWindow 载入的html文件是gulp来生成的所以不能传入动态数据
需要去除gulp自动编译jade为html的监听
需要更改思路和代码:
1在注解 CretedWindow 中直接new被注解的类然后注解内部调用其 自定义的 render 方法,得到需要被传给模板引擎的数据
2注解内部调用 jade 插件 的 renderFile 方法renderFile 方法需要三个参数,分别是:
renderFile(原始jade文件路径, 传给模板引擎的数据+jade插件设置参数, 回调函数 (null,res)=>{})
注意:
1原始jade文件路径可以根据被注解的类的名称自动寻找
2render函数的返回数据 需要和 jade插件的设置项 进行 Object.assign 合并
3回调的第一个参数据源码中得出就是null第二次参数 res 才是正在编译后的html。
3这一步我们已经拿到了生成好的且带有数据的最终HTML那么需要再次根据被注解类的名称自动将文件生成到dist/路径下
具体路径为Note/dist/application/page/Home/Home.html这路径中 的 Home 也就是类名,需要动态生成文件夹,和
文件夹里面的同名 HTML 文件
4数据注入成功模板写入成功这一步需要实现的就是正常的 new BrowserWindow 即可!!
最后实现效果:
@CretedWindow()
export class HomeController implements BaseControllerTypes {
render(): { [p: string]: any } {
return {
title: '测试传给模板的数据'
};
}
// 事件
public event(): void {}
// ipc
public ipc(): void {}
}
问题3
目前效果:
Controller上的装饰器 @CretedWindow() 会根据 类的名称在创建桌面窗口的时候自动去寻找对应html文件。
目前的问题:
1这种通过大家遵守一些约定能够让程序自动去做一些重复性的事情减少了冗余无用的代码但是目前只能寻找类型相同的窗口html文件不够自由
2这种约定大于配置的方式一定严格意义上也是所谓的"硬编码"!开发者在使用的时候灵活性缺失!
需要实现:
继续改造问题2已经实现的功能controller控制器中定义render方法返回数据能够自动将数据传递给前端模板渲染到页面上其实这个功能就是php的模板渲染
已实现效果:
@CretedWindow()
export class HomeController implements BaseControllerTypes {
render(): { [p: string]: any } {
return {
title: '测试传给模板的数据',
desc: '介绍'
};
}
}
需要改造成的效果:
@CretedWindow()
export class HomeController implements BaseControllerTypes {
@render('Setting')
public hello(): { [p: string]: any } {
return {
title: '测试传给模板的数据',
desc: '介绍'
};
}
}
其他不成熟且大胆且未经深思考虑过的模糊想法:
同时还有个更加大胆的想法直接借鉴java框架springboot的代码编写风格和思路实现控制器中每个方法都是可以控制一个页面的创建和模板数据传递渲染
而不是现在这种通过控制器实现窗口的创建控制器中render方法实现模板数据传递渲染
可能存在的问题:
1新的不成熟的想法不好的地方在于采用新的设计思路会导致控制器中无法独立处理ipcui后台监听等任务如果要解决这个复杂的问题那么需要开发一套
针对于ipcui后台监听事件的全新的装饰器让代码风格更加彻底的java化这样做的好处是开发者只需要看看文档就会用框架
一切复杂的东西都将会隐藏在简单的表面之下!,同时带来一个新问题,开发起来会很累,不过这样才会很有意思。