惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
aimingoo的专栏
aimingoo的专栏
IT之家
IT之家
G
Google Developers Blog
爱范儿
爱范儿
博客园 - 司徒正美
Recent Announcements
Recent Announcements
The Register - Security
The Register - Security
J
Java Code Geeks
The Cloudflare Blog
M
MIT News - Artificial intelligence
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Security Blog
Microsoft Security Blog
博客园 - Franky
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
Vercel News
Vercel News
宝玉的分享
宝玉的分享
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
B
Blog
小众软件
小众软件
Microsoft Azure Blog
Microsoft Azure Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
T
Troy Hunt's Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
H
Hacker News: Front Page
H
Help Net Security
S
Security @ Cisco Blogs
V
V2EX
Security Archives - TechRepublic
Security Archives - TechRepublic
Stack Overflow Blog
Stack Overflow Blog
O
OpenAI News
L
LINUX DO - 最新话题
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
S
Secure Thoughts
Help Net Security
Help Net Security
F
Full Disclosure
博客园 - 叶小钗
The Hacker News
The Hacker News
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Jina AI
Jina AI
K
Kaspersky official blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
Scott Helme
Scott Helme

博客园 - Roy Zhang

让文档和Demo生成更加简单和强大 - SmartDoc 0.1.1 说明 SmartDoc(YUIDoc) 注释编写 JS文档和Demo自动化生成工具 - SmartDoc发布 smartjs - DataManager 场景示例分析 - 数据懒加载 smartjs - DataManager API smartjs 0.3 DataManager 发布&介绍 SmartJS 系列规划分享和背景介绍 smartjs 0.2 OOP讲解 - factory smartjs 0.2 OOP讲解 - Klass 类继承 smartjs 0.2发布 - 新增oop模块&AOP增强 smartJS 0.1 API 讲解 - FlowController smartJS 0.1 API 讲解 - Trigger smartJS 0.1 API 讲解 - PromiseEvent SmartJS 第一期(0.1)发布 - AOP三剑客 SmartUI2.0后续声明 JQuery SmartUI 2.0 方案启动 JQuery Smart UI 开发规范&API文档发布 JQuery Smart UI与Moss结合演示 JQuery Smart UI 快捷开发实例应用(二)— 开发模式【从项目开发流程说起】
告别aspx,高性能快捷开发 — JQuery Smart UI 快捷开发实例应用(一)入门【后篇】
Roy Zhang · 2010-12-10 · via 博客园 - Roy Zhang

  上篇把服务端Bll层的内容完成了,下面就开始UI层的开发,打造简洁而“清爽”的功能页面.

  • 第四步,配置Fncode

  与BLL后台方法对应,在UI层进行FnCode的配置,位置在:Config/FnCode.xml中。

<Module name="UIDemo">
<BR name="BRNews">
<Fn no="fn_ns01"></Fn><!--查询-->
<Fn no="fn_ns02"></Fn><!--保存-->
<Fn no="fn_ng03"></Fn><!--获取单条数据-->
<Fn no="fn_nd04"></Fn><!--删除-->
</BR>
</Module>

Module:模块名节点,对应每个FnAdpter

BR:业务类节点

Fn:功能编号节点。

另外还有roles角色权限配置的在后续文章中介绍。

  • 第五步,设置实体

  前台设置实体是Smart UI中实现各种动态生成的关键,位置在Javascript/const/modals.js:

m_news = {
ID: { field: 'N_ID'}
, Title: { field: "N_Title", name: "Title", width: '150px', valid: true, validops: { required: true, range: [3, 50]} }
, Content: { field: "N_Centent", name: "Content", width: '380px', ctr: 'textarea', valid: true,

validops: { required: true, range: [20, 1000]} }
, Date: { field: "N_Date", name: "Create Date",sort:true, width: '80px', type: 'date' }
};

与数据库的字段对应【但也不用完全一致,可以根据具体情况】。设置属性中包括:数据库字段、列表列设置、对应控件设置、数据类型设置、验证设置等等,详见Smart UI设置实体API

  • 第六步,创建内容页面

  主要有三个htm页面,【注:页面内容为空,不用任何文本和标签】创建到Pages/Learning/目录下:

  BaseFull.htm:列表页面,为主页面

  BaseFullEdit.htm:编辑页面,弹出页面

  BaseFullView.htm:查看页面,弹出页面

  然后再内容页面配置到Javascript/const/menus.js中

代码

//母模板页配置
$master = ['Default.htm', ……, 'Demo.htm'];‘//页面路径配置
$pagepath = ['Pages/', 'Pages/Plugins/', 'Pages/Learning/', ……];//内容页面配置【uicode】
$page = {
………………
, u_demo_basefull: { name:
'完整功能', url: 'BaseFull.htm', master: 4, path: 2 }
, u_demo_basefulledit: { url:
'BaseFullEdit.htm', path: 2 }
, u_demo_basefullview: { url:
'BaseFullView.htm', path: 2 }
}
//菜单配置
 $menus = {
      …………,
    , learning: [
                { name: '基础部分', rows: [

                    {name: $page.u_demo_baseedit.name, ui: 'u_demo_baseedit' }
                    , { name: $page.u_demo_baselist.name, ui: 'u_demo_baselist' }
                    , { name: $page.u_demo_basefull.name, ui: 'u_demo_basefull' }
                ]
                }

}

$master: 母模板页配置,每个主页面需要对应一个master

$pagepath: 内容页面路径配置

$page: 内容页面配置,子对象名既为uicode【如:BaseFull.htm的uicode为u_demo_basefull】,master:母模板页,对应$master的序号,path:对应$pagepath的序号。

$menus:菜单配置,name:显示名称,rows:子菜单,ui:uicode与$page的子对象名对应

   至此,所有配置端的内容完结,呵呵,感觉是有些多,不过也还好,不算很麻烦,当然配置的话很多地方可以简化,但考虑到整个项目维护性上和性能上,这样做还是很有必要的。后面版本中会加入配置生产工具,可以减少很多配置的工作量。

  • 第七步,内容页面coding

  内容页面准确的说只是一个片段html,不具备完整的html结构【<html>标签这些都不用定义,当然完整的结构也没问题,实现效果一样,但却没有任何意义,而且会增加页面大小。】。

  1.编辑页面BaseFullEdit.htm 

代码

<div class="eidtPanel" id="editPanel">
<h4>
News Edit
</h4>
<input id="hidNID" type="hidden" field="N_ID" />
<ul id='pe_News'>
</ul>
<div class="operate">
<a class="btn" id="btnSave"><span>Save</span></a>
<a class="btn" id="btnCancel"><span>Cancel</span></a>
</div>
</div><script type="text/javascript">
$(
function () {
initEdit();
});
</script>

  2.查看页面BaseFullView.htm

  其实查询页面与编辑页面的大部分结构一样,可以用相同一页面,但为了演示方便在这里分开使用。 

代码

<div class="viewPanel">
<h4>
News View
</h4>
<ul id='pv_News'>
</ul>
<div class="operate">
<a class="btn" id="btnCancel"><span>Cancel</span></a>
</div>
</div><script type="text/javascript">
$(
function () {
initView();
});
</script>

  3. 查询列表页面BaseFull.htm

<div class='searchPanel'>
<h4>
News List
</h4>
<div class="operate">
<a class="btn" id="btnSearch"><span>Search</span></a>

<a class="btn" id="btnAdd" onclick="openEdit()"><span>Add</span></a>

<a class="btn" id="btnDel"><span>Delete</span></a>
</div>
<div class='panel_body'>
<ul id="ps_News">
</ul>
</div>
</div>
<div id="pl_News">
</div>

查询页面Html做为主页面,编辑页面和查看页面的初始化代码都放在查询页面中【当然也可以分开,每个页面放自己相关代码,但整体上,所有内容都是在一个htm中,彼此的对象都可以互相访问,将代码集中起来更便于管理】

查询页面js ,这些js可以放到页面上,也可以单独用js文件,然后再内容页面上加引用【即jscode的方式,后面会介绍此方式的优势】。

<script type="text/javascript">
$(
function () {
//生成查询区域
$ihelper.createItemList('ps_News', [m_news.Title], 'search');//生成查询区域
var columns = [m_news.Title, m_news.Content
//创建自定义列—编辑列
, { name: 'Operate', width: '70px', css: 'center',
custom:
'<a class="icon edit" onclick="openEdit(${N_ID})" title="Edit" /><a class="icon view" onclick="openView(${N_ID})" title="View" />'
}
];
//生成列表
$icontrol.grid("#pl_News", { columns: columns, showchk: true, chkfield: 'N_ID', sort: 'N_Date asc' }, 'fn_ns01');//绑定查询事件
$('#btnSearch').click(function () {
$ihelper.search(
'fn_ns01', "#ps_News", "#pl_News");
});
//绑定删除事件
$('#btnDel').click(function () {
$ihelper.gridDel(
'fn_nd04', 'pl_News');
});
});
//打开编辑窗口
function openEdit(key) {
$ihelper.openModalWithKey(key,
'nparam', 'u_demo_basefulledit', 600, 250);
}
//初始化编辑页面
function initEdit() {
//初始化页面方法
$ihelper.initLoadPage('nparam', 'fn_ng03', function (data) {
//生成编辑表单
$ihelper.createItemList('pe_News', [m_news.Title, m_news.Content], 'edit', data);
//给编辑表单外的控件赋值,记录主键id
if (data && hasValue(data.N_ID))
$(
'#hidNID').val(data.N_ID);
//绑定保持事件
$('#btnSave').click(function () {
$ihelper.save(
'fn_ns02', "#editPanel", true, true, function () {
$(
'#btnSearch').click();
});
});
//绑定取消事件
$('#btnCancel').click(function () {
//关闭模态窗口
$icontrol.modalwinClose();
});
});
}
//打开查询窗口
function openView(key) {
$ihelper.openModalWithKey(key,
'nparam', 'u_demo_basefullview', 600, 220);
}
//初始化查询页面
function initView() {
$ihelper.initLoadPage(
'nparam', 'fn_ng03', function (data) {
$ihelper.createItemList(
'pv_News', [m_news.Title, m_news.Content, m_news.Date], 'view', data);
$(
'#btnCancel').click(function () {
$icontrol.modalwinClose(
);
});
});
}
</script>

代码中主要用到了$ihepler页面帮助库和$icontrols控件库,详细的方法api说明请上Smart UI 查看

最后的页面效果如下:

  所有增删改查功能完成,整个功能代码还是相当简洁和清晰的,当然这些代码还可以更一步的简化,在此只是一个引子,后面的实例介绍中会有更多丰富的内容。

      演示的例子地址连接代码下载地址