kbmmw 与extjs 的初次结合
前面写了extjs 的安装,今天写一下kbmmw 与extjs 的结合,参照delphi 产品经理marco文章 。
由于extjs 设计时要读取服务器端的数据,所以先要做一个rest 服务器。
先要用kbmmw 建一个web 服务器,可以参照我以前写的例子。
由于要返回数据库,因此加入对应的数据库访问控件,我使用unidac 加postgresql,需要的可以在
www.hoasql.com 去下载。
我们开始写服务器端。加上必要的数据库访问控件,并保证运行正常。

进入webservice 单元,加对应的代码。
function Twebsrv.Performget(ClientIdent:TkbmMWClientIdentity; const AURL:string; const Args:array of Variant):Variant;
var
mystringstream:Tstringstream;
MimeType,s,scallback:string;
Charset,tablename:string;
qv:TkbmMWHTTPQueryValues;
dataurl,mysql,swhere:string;
I: Integer;
begin qv:=TkbmMWHTTPQueryValues.Create;
dataurl:=args[];
qv.AsString:=Args[];
if length(Args)< then
kbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING,'Missing URL.'); try if args[]='/version' then
begin
result:='kbmmw 5.03';
exit;
end; if args[]='/getdata' then begin tablename:=qv.ValueByName['tname'] ; if tablename='' then
begin result:='表名不能为空!';
exit;
end; swhere:= qv.ValueByName['where']; //where 需要编码。注意注入 if swhere<>'' then
begin
if pos(';',swhere)> then
begin
result:='非法条件!';
exit;
end;
swhere:=' where '+swhere;
end; mysql:='select * from '+tablename; mysql:=mysql+swhere; s:=datatojson(tablename, mysql,'',''); scallback:=qv.ValueByName['callback'];
if scallback<>'' then
result:=scallback+'('+s+')'
else
Result:=s;
exit; end; result:=inherited Performget(ClientIdent,aurl,Args) ;
finally
qv.Free;
mystringstream.Free; end;
end;
下面是数据库转json 的代码
function Twebsrv.datatojson(tname,datasql, startp, endp: string;
inparams: tstringlist = nil): string;
var
sjosn:TkbmMWJSONStreamer;
alljson: TkbmMWJSONObject;
datajson: TkbmMWJSONArray;
recordjson: TkbmMWJSONObject;
starti, endi, i: integer;
idate:int64;
mydate:Tdatetime;
begin if startp = '' then
starti :=
else
starti := strtoint(startp); alljson := TkbmMWJSONObject.Create;// ( (stobject); sjosn:=TkbmMWJSONStreamer.Create;
try
with cx do
begin
sql.clear;
sql.add(datasql); if inparams <> nil then
begin
for i := to inparams.Count - do
begin
if inparams.Names[i] <> '' then
begin
cx.Parambyname[inparams.Names[i]].AsString :=
inparams.ValueFromIndex[i];
end;
end;
end;
try
Open;
except
result:='数据库打开错误!2';
exit; end;
datajson :=TkbmMWJSONArray.Create;//(starray);
while not eof do
begin
recordjson :=TkbmMWJSONObject.Create; for i := to fields.Count - do
begin
case fields[i].DataType of
ftDate, ftTime, ftDateTime:
begin
mydate:=fields[i].AsDateTime; recordjson.AsString[fields[i].FieldName]:=formatdatetime('yyyy-mm-dd hh:nn:ss',mydate);
end else
recordjson .AsString[fields[i].FieldName ]:= fields[i].AsString; end;
end;
datajson.add(recordjson); next;
end; alljson.AsArray[tname] := datajson;
end;
result := sjosn.SaveToUTF16String(alljson);
finally
sjosn.Free;
alljson.Free;
end; end;
保存并运行。可以在浏览器里面输入http://localhost/getdata?tname=emp 访问服务器。
firefox 会返回这样

原始数据

好了,服务器做好,让它正常运行。
我们下载打开extjs 设计器
开启一个空白新工程

点击加号,选择一个新模型。
再新建一个Stores.选择JSONStore.

再右面属性栏,设置它的model.并选择autoload。

把MyajaxProxy 转换成MyJSONPProxy
设置myJSONPProxy 的URL.

ok, 可以右键选择datastore, loaddata, 然后就会出现一下眼睛图标。点击就可以看见服务器返回的数据了。

说明服务器工作正常。
现在拖一个gridpanel 到设计器上。

系统自动生成几个列。先不要管它,选择它的datastore 为myjsonstore.

右键选择,开始gird builder.

加入对应的字段,就可以生成gird了

ok, 保存工程文件。
在主文件菜单选择发布 命令(或者按F5)。

选择kbmmw 的web 服务器的文件目录并发布文件。

发布完成。
回到浏览器,输入http://localhost/index.html。

可以正常显示数据了。
当然了,还没有添加增、删、改的功能,这些对应服务器上也要做对应的处理,今天就不做了。
等以后有机会再做。
kbmmw 与extjs 的初次结合的更多相关文章
- kbmmw 与extjs 通过JSON Base64 显示图片
delphi 官网上开始也来越多的介绍delphi与extjs 结合的例子,今天我就把官方的例子翻版一下. 官方使用C++builder 和webbroker 实现. 我使用kbmmw 来实现一下. ...
- kbmmw 的HTTPSmartService中的跨域访问
有同学在使用kbmmw 与extjs 结合的时候,涉及到了跨域访问,这个在 kbmmw 里面已经完全解决. extjs 在访问跨域的时候,首先会使用OPIONS 调用,服务端要根据浏览器请求的 he ...
- kbmmw 中简单返回 extjs 数据JSON
以前,我们通过自己写json 来返回数据表的内容.在delphi 10.2.2中,官方自带了一个FDBatchMoveJSONWriter1 来直接处理数据库内容.把结果推送到浏览器客户端. 今天我们 ...
- ExtJS 4.2 业务开发(一)主页搭建
本篇开始搭建一个ExtJS 4.2单页面应用, 这里先介绍主页的搭建,内容包括:主页结构说明.扩展功能等方面. 目录 1. 主页结构说明 2. 扩展功能 3. 在线演示 1. 主页结构说明 1.1 主 ...
- ExtJs 4.2.1 复选框数据项动态加载(更新一下)
最近在做博客项目,后台管理用的是ExtJs4.2.1版本,因为是初学所以在使用的时候也遇到不少的这样或那样的问题,也写了不少这方面的博客,今天要写的博客是关于复选框数据项动态的加载功能,以前也没用过, ...
- ExtJs 自定义Vtype验证
最近公司开发项目在用ExtJs,碰到验证的就大概的总结了一些常用的验证.自定义的验证主要有两种方式:一种是单字段的自定义验证,另一种是多字段间的验证.对于单字段的验证主要通过regex配置项指定自定义 ...
- ExtJS 4 树
Tree Panel是ExtJS中最多能的组件之一,它非常适合用于展示分层的数据.Tree Panel和Grid Panel继承自相同的基类,所以所有从Grid Panel能获得到的特性.扩展.插件等 ...
- extjs表单验证
extjs表单验证 //放在onReady的function(){}中 Ext.QuickTips.init(); //为组件提供提示信息功能,form的主要提示信息就是客户端验证的错误信息. Ext ...
- ExtJS 4.2 评分组件
上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...
随机推荐
- python基础入门学习1
python比较 -python执行效率低,开发效率高. -JAVA执行效率高,开发效率低. python种类多:比如Jpython Cpython pypy(这是Cpython开发的python) ...
- NumPy 切片和索引
NumPy 切片和索引 ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样. ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以 ...
- linux下主从同步和redis的用法
前言 mariadb其实就是mysql mysql已经被oracle收购,它即将闭源,马上要开始收费了因此还想免费试用开源的数据库mysql,就在centos7上,将mysql分支为mariadb 操 ...
- HDU 1698 Just a Hook(线段树区间更新查询)
描述 In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes ...
- 《基于Nginx的中间件架构》学习笔记---3.nginx的目录分析
一.目录分析 用yum的方式进行安装实质上装的都是一个个的rpm包,对于linux系统rpm包管理器,我们使用命令rpm -ql 服务名称 就可以列出我们已经安装的服务所对应安装的每一个文件所在的目 ...
- DBCO
实现SAP连接外部数据库 也可用SM30维护DBCON的内容 SAP提供了对原生sql的操作,主要有以下几个类组成: CL_SQL_STATEMENT - Execution of SQL State ...
- git log的用法
git log 查看 提交历史默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面. git log --graph --pretty=format:'%Cred%h ...
- Android Studio 增加按钮响应事件
在xml文件里增加android:onClick属性 比如: android:onClick=doanything 然后写响应方法 public void doanything(View v) { . ...
- Cmder安装配置
转: 1)Windows 命令行增强 cmder chocolatey 配置指南 2) Windows必备神器Cmder使用教程 3)Windows上的程序员神器——Cmder 4)Windows命令 ...
- PAT 1046 划拳(15)(代码)
1046 划拳(15)(15 分) 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢 ...