⌂ 首页更新 10-21 19:00

C005 前端配置:Site.xml·en.js·Site.css

页面是几块拼的 · Views 找 Id · ViewRef · 按钮 · Rule 判断题 · 三种变色 + 答错过的地方

一、四个文件各管什么

前面学的视图、角色、公式都是在 C8 网页里点出来的;这一课改的是服务器上的 4 个文件,位置 D:\C8\WebAccess\Site。

文件管什么
Site.xml页面上放什么:哪些数据、哪些按钮、谁能看
Site.js点了按钮、改了字段之后做什么
Site.css长什么样:颜色、字号
en.js页面上显示的文字:内部名 → 显示名
改完怎么生效:把改好的 4 个文件复制进服务器的 Site 文件夹 → 更新配置。

二、Path 的三种走法

写法意思例子
Child:顺着箭头走站在里布衬,Child:ProductType → 辅料
Parent:逆着箭头回去,找谁指着我站在辅料,Parent:ProductType → 里布衬、金属扣…
Index:一串里按位置挑一个,从 0 数Child:ProductColors/Index:0 → 第 1 个配色

三、一个页面=好几块拼起来

打开任何页面,点底栏 Views,上方会列出拼成这个页面的每一块,每块第一行写着 Id / Type / Module。

显示的是什么
Id这一块的名字
Type它挂在哪个 NodeRef Type="…" 下面
Module写在哪:Site=我们改过的;Apparel、SiteAdmin 等=系统原厂
xsi:type页面上长什么样
Tabs一排标签页
Table一张清单表
Form新建 / 编辑时弹出来填的窗口

ViewRef=一行一个标签:Tabs 块里写几行 ViewRef Id="…",页面上就有几个标签,每个标签放 Id 叫那个名字的表。它跟 ref 一个道理:存别人的编号,顺着指过去(ref 指一行数据,ViewRef 指一个页面块)。

对应:Tabs 块里 3 行 ViewRef ↔ 页面上 3 个标签。
颜色一一对应:红=项目清单,蓝=项目进度,绿=双周会项目进度。
想改的地方找哪一块
一排标签(加 / 删 / 换顺序)xsi:type="Tabs" 那块,改里面的 ViewRef
一张表(数据范围、操作栏按钮)xsi:type="Table" 那块
表里的列Card / Heading
不想要某个标签,不必真删:用 <!-- … --> 包起来=注释掉,不生效,以后好恢复。

四、Node 和 NodeRef 不是一个东西

在哪出现是什么
NodeDebug、数据库一行数据
NodeRefSite.xml「在系统原来那份定义上加东西」。原文件用 <Node> 写完整定义,我们不动它;Site.xml 用 <NodeRef> 只写要加的
新加的东西名字自己起(按钮 Id,习惯 C8_ 开头);要挂靠的已有页面,名字照抄系统的(用 Views 开关看)。用 <Node> 去写会把原页面整个覆盖掉。

五、按钮:Action、OnAction / PostAction

写在 <Actions> 里的 Action,出现在页面的「操作」栏。现成的有 New 新建、NewFrom 从…新建、Copy 复制、Edit 编辑、Delete 删除、MoveUp / MoveDown 上移下移。

时间点挂什么例子
点了保存、还没发给服务器OnAction存之前把日期填成今天
服务器存完、结果回到页面PostAction存完把另一块表格刷新

口诀:On=存之前插一手,Post=存完再补一刀。

一个按钮靠 3 个名字把文件串起来,一个字母都不能差:

管什么同一个名字写在
显示什么字Site.xml 的 Action Id ↔ en.js
点了跑哪段Site.xml 的 OnAction="Site.函数名" ↔ Site.js 的函数名
改哪个属性Site.js 里照抄的属性内部名 ↔ 网页上建属性时起的名

六、en.js:内部名 → 显示名,也能反查

en.js 里分区写:包在 "View" 下面的是页面 / 标签页的名字,包在 "Action" 下面的是按钮的名字。en.js 里没写,页面上就直接显示内部名。

步做什么
①en.js 里 Ctrl+F 搜页面上看到的中文
②搜到 "内部名": "中文",冒号左边就是 Id
③往上看它被 "View" 还是 "Action" 包着 → 页面还是按钮
④拿 Id 去 Site.xml 搜,找到它的定义
坑:有的 en.js 中文存成 \u65b0\u589e 这种编码,搜中文会搜不到。

七、Rule=一道判断题

Rule 只有成立和不成立两种结果,挂在哪,决定成立以后发生什么。

挂在哪成立以后例子
列(Heading)里,带 Class这一格换样式状态=紧急 → 红
按钮里,判断数据按钮能用未发送并且新建 → 能删
按钮里,判断角色这个人能用Admin 或创新洞察部门 → 能新增
对应:Rule 挂在「状态」列上。
状态=紧急 → 套 Red;状态=非常紧急 → 套 Black;都不是 → 不变。
对应:Rule 挂在 Delete 按钮里。
紫色那行:发送状态=未发送 并且 数据状态=新建,删除按钮才能用。

两种写法,效果一样:

填空式公式式(Exp)
Id1="C8_Style_Status"attr('C8_Style_Status')
Op="EQ"==
Value="C8_StyleStatus:紧急"'C8_StyleStatus:紧急'
<Rule Class="Red" Exp="attr('C8_Style_Status')=='C8_StyleStatus:紧急'"/>
写法意思
attr('列名')取这一行这一列的值(列名填内部名)
&&并且,两个都成立才算(文件里写成 &amp;&amp;)
||或者,一个成立就算
currentRoleName()当前登录这个人的角色名
leftstr(x,4) / rightstr(x,5)取左边前 4 个字 / 右边后 5 个字(一次放进整个部门的角色)
Id1 永远填列名,不是哪一行;每一行都拿自己的值判断一遍。

八、Site.css:三种变色

Site.xml 里只写样式名 Class="名字";颜色在 Site.css 里写 .名字 { background-color: … }(前面的点是 CSS 固定写法)。又是靠同名对上。

变什么Site.xml 写在哪条件
整行Relationship 里的 <Rule Class=…/>有
一格Heading 里的 <Rule Class=…/>有
表头Heading 上直接写 Class="…"没有,永远

同一条 Rule,从 Relationship 挪到 Heading,就从整行变色变成只变一格。先看它在哪一层,就知道它管哪一块。

对应:整行变色。Rule 写在 Relationship 里:Active=false(不活动的款)→ 整行套 stateGrey。
对应:表头变色。黄色的列标题=Heading 上直接写了 Class,没有 Rule。

表头那条 CSS 写成 .tableView>thead>tr>th.名字:> 读「里面的」,意思是只给表格表头里带这个名字的格子上色。

九、答错过的地方