任务一的练习是在为任务二做铺垫,任务二主要是需要自己设计数据表,使用的技能大多是任务一中使用的。通过任务二,进一步熟悉了现有的项目,其中遇到的bug,在提高调试技巧的同时,也使我开始思考bug产生的原因和系统的设计和封装。
记录下实现的过程:
1.首先是在main.html中增加节点,写主页面并注册在controller文件下的类中,在类中进行页面加载:
m_elGoodsList = this->find_first("#goods_list"); //从当前窗体中找到元素
m_elGoodsList.xcall("page_bind","empList_all"); //查数据并绑定数据分页显示
2.搜索功能的实现,首先获取文本框的值和搜索类型,用switch,case结构实现不同的搜索结果显示。更新界面:m_elGoodsList.xcall("page_bind","empList_byNo",wsKey);
这里需要注意的是,sql语句的书写,使用在SqlDict类中定义的sql4模板,需要获取字段,并使用字段转换函数(在FieldTransform.cpp中定义)。
使用模糊匹配[where empName like :empName(字符占位)]时,字段需要处理:wsKey=L"%"+wsKey+L"%";
3.新建 创建新窗体:
if(IDOK==CBaseWindow::DoModal("NewTask2_yxm",0,m_hWnd)) //弹出新窗体,参数为:目标窗体,传值,句柄
{
m_elGoodsList=this->find_first("#goods_list");
m_elGoodsList.xcall("refresh"); //刷新
return;
}
4.修改 需要注意的是获取选中行的值,并传递。
json::value jsonEmployeeInfo;
jsonEmployeeInfo.set_item("empName",GetElementValue(elRow, "[field='empName']", L"")); //将页面的值赋给“empName”
std::wstring empID=elRow.get_attribute("data-empID");//获取id
jsonEmployeeInfo.set_item("empID",empID);
if(IDOK==CBaseWindow::DoModal("modifyTask2_yxm",(LPVOID)&jsonEmployeeInfo,m_hWnd))
因为对相关类库不熟,这里传值还费了点心,主要是id的获取,因为不能显示在界面上,用了一个white的<span>元素,应该还有更规范的方法。
在接受界面中:
//获得上一个窗口传递过来的数据
json::value valInfo = *(json::value*)(lpParams);
//获取json中的数据
std::wstring wsName = valInfo.get_item("empName").get(L"");
修改数据:
1
2
3
4
5
6
7
8
9
10
11
12
|
//得到参数 std::wstring
temp_name = GetValue( "#edt_name" ,L "" ); std::wstring
temp_sex = GetValue( "#edt_sex" ,L "" ); int temp_age
= GetValue( "#edt_age" ,0); int temp_edu=GetValue( "#edt_edu" ,0); std::wstring
temp_intime = GetValue( "#edt_intime" ,L "" ); int temp_depart
= GetValue( "#edt_depart" ,0); int temp_id=GetValue( "[field='empID']" ,0); CDB::Sql()<< "update
g_demo_employee_yxm set empSex=:temp_sex,empAge=:temp_age,empIntime=:temp_intime,empName=:temp_name,empDepart=:temp_depart where empID=:empID" , soci::use(temp_sex),soci::use(temp_age) ,soci::use(temp_intime),soci::use(temp_name),soci::use(temp_depart),soci::use(temp_id); |
5.右键增加任务
用的技能点在之前的基础上,需要了解xcall的定义和参数的意义:
elTaskList.xcall("bind","task_list",wsID); //不分页,缺少分页所需参数
6.审核任务:
dom::element elTaskList=this->find_first("#task_list");
dom::element elRow=elTaskList.find_first("tr:checked,tr[check=1]"); //获取点中的行
写完提交后,旭哥提出修改意见,我几乎又花了一天的时间修改。主要是界面显示和功能安排的问题,技术终究是给人使用的,所以要站在用户的角度来思考,不能为了简便牺牲用户体验。
在做的过程中,数据库是问题较多的一块。代码和数据都是现实世界的反映,需要多加思考。
2016.7.29
北京 掌上先机