赞
踩
实现的位置在 sheetmanage.js
sheetmanage.initialjfFile(menu, title);
_this.getCurSheet(); //Line585
let file = Store.luckysheetfile[_this.getSheetIndex(Store.currentSheetIndex)];
首先,获取当前的sheet,并把相应数据存放到file变量,Store.luckysheetfile 的数据怎么来的呢?跟踪core.js, 可以通过URL获得(Line114-115),也可以通过 extendsetting (Line38)获得,extendsetting来源于 index.html定义的 一堆 ./demoData下面的 .js文件
let data = _this.buildGridData(file);
查看data是双重数组,第一层为行,第二层为列,数据结构与 ./demoData下面的 .js文件一致
luckysheetcreatedom(colwidth, rowheight, data, menu, title);
函数定义在createdom.js, 几个参数前面三个,都是从URL或者File得到,前两个分别是行列的长度,后面两个menu和title从./config.js或者 创建表格参数而来。
这个函数其实就是处理gh这个变量,从constant.js拿到模板后,通过 replaceHtml()函数不断修正 gh,最后通过 下面这句话完成界面。
$("#" + Store.container).append(gh);
```j
### 2.3.1. 构造HTML元素
```javascript
let gh = gridHTML(); // createdom.js Line34
函数定义在constant.js,直接返回一个超级大的string,分解后主要有下面几个部分:
luckysheet_info_detail_title
luckysheet_info_detail_input
luckysheet_info_detail_update
luckysheet_info_detail_save
luckysheet_info_detail_user
对应${menu}参数,在后面会通过replace的方式赋值
luckysheet-wa-calculate-size 表格选择区域
luckysheet-wa-calculate-help 这个下拉框demo里面没有具体
luckysheet-wa-functionbox-cancel 取消公式
luckysheet-wa-functionbox-confirm 确认公式
luckysheet-wa-functionbox-fx 弹出公式对话框
luckysheet-functionbox-container 手工输入公式框
这个区域实际是一个table,包括 行标题定义 c o l u m n H e a d e r 、 列 标 题 定 义 {columnHeader}、列标题定义 columnHeader、列标题定义{rowHeader}
luckysheet-sheets-add 新增sheet
luckysheet-sheets-m sheet选单
luckysheet-sheet-container sheet
luckysheet-sheet-container-c
luckysheet-sheets-leftscroll
luckysheet-sheets-rightscroll
editor.webWorkerFlowDataCache(Store.flowdata);// createdom.js Line54
这里的Store.flowdata 就是上面准备好的 data(每一个单元格的填充信息),editor.js的作用以后再进一步分析
上面构造出的gh,注入到container里面
$("#" + Store.container).append(gh);
$("#luckysheet-scrollbar-x div").width(Store.ch_width);
$("#luckysheet-scrollbar-y div").height(Store.rh_height - 30);
luckysheet-modal-dialog-mask
$("body").append(maskHTML);
$("body").append(colsmenuHTML); //NULL 不知道预留做啥用
$("body").append(rightclickHTML());
$("body").append(inputHTML);
$("body").append(replaceHtml(filtermenuHTML(), { "menuid": "filter" }));
$("body").append(replaceHtml(filtersubmenuHTML(), { "menuid": "filter" }));
$("body").append(sheetconfigHTML());
postil.js Line293 根据data双重循环,在指定的单元格设置牛皮便条
luckysheetPostil.buildAllPs(Store.flowdata);
至此,luckysheetcreatedom()的分析就结束了,接下来是
sheetmanage.initialjfFile().ini().execF() 函数 调用 refresh.luckysheetrefreshgrid()
luckysheetrefreshgrid(0, 0);
refresh.js Line951调用 draw.luckysheetDrawgrid(),这个函数包含三个部分:
luckysheetDrawgridRowTitle() // 绘制行标题部分
luckysheetDrawgridColumnTitle() // 绘制列标题部分
luckysheetDrawMain() // 绘制页面的编辑区域部分
luckysheetDrawgrid(scrollWidth, scrollHeight);
至此,LuckySheet界面静态页面的绘制工作的分析全部结束。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。