导航:
论坛 -> Web应用开发
斑竹:bodies
作者:
2016/12/17 17:14:13
标题:
ExtJS+WebBroker搭建Web应用开发框架--毙掉Intraweb、UniGUI
浏览:12564
加入我的收藏
楼主:
前一阵我发个一个贴子说使用WYSISWYG WebBuilder+WebBroker搭建Web应用开发框架,现在将前端升级,将WYSISWYG WebBuilder换成Sencha ExtJS。这个方案更棒。 前端用ExtJS,目前的6.2版已经将桌面与手机开发统一到一套工具中,负责页面。 后端用Delphi内部自带的WebBroker,WebBroker只用了写JSON服务。
----------------------------------------------
-
作者:
2016/12/17 17:40:25
1楼:
对比intraweb好处在那里哟?运行速度会更快,可以更高并发性?给一个demo网址,让大伙一起分享你的喜悦啊
----------------------------------------------
-
作者:
2016/12/17 18:04:36
2楼:
问题的关键是当前做Web开发,尤其是RIA,前端选哪个框架?选React/Angular,还处在婴幼儿阶段;选jQuery,零敲碎打,不成体系,插件虽多,Bug也多;以前误入了Dojo,体系不错,可惜没有很好的Grid。只有ExtJS,历经风雨,经久不衰,目前已被60%世界100强的企业采用。ExtJS版本发展到6.X,已经将移动开发与桌面开发统一成一个平台。Sencha ExtJS的控件无所不包,Grid与Chart开箱即用。Sencha Architect很像Dephi,支持RAD,提供一个可视化的界面开发环境。
----------------------------------------------
-
作者:
2016/12/17 18:30:25
3楼:
相对前端来说,后端成熟方案有很多,TOMCAT、PHP、NodeJS都不错,ASP.NET也凑合,咱们用Delphi的,自然是在WebBroker与IntraWeb间选择。IW的优点与缺点不多说。使用WebBroker的好处是Delphi自身集成,可以写ISAPI的DLL与单独运行的EXE,实践中通过Nginx+WebBroker编译成EXE用于调试,IIS+WebBroker编译成ISAPI的DLL用于发布。生产环境中应用Delphi写的64位ISAPI规格的DLL运行起来非常稳定,支持上万的并发连接。 ExtJS+WebBroker方案的关键是要求开发者精通Javascript,光会Delphi是不行的。不像IntraWeb,只要开发者会Delphi就行了。
----------------------------------------------
-
作者:
2016/12/17 18:31:12
3楼:
让c5soft 说得很兴奋,马上查了一下webBroker 好象自身不带session管理,处理起来不会太麻烦吧
----------------------------------------------
-
作者:
2016/12/17 18:41:27
4楼:
WebBroker的确自动生成的代码的确没有Session管理,这很容易写。关键就是解析客户端传回来的cookie,在里面存储一个唯一的ID。通过这个ID到数据库中去存取Session相关数据。
----------------------------------------------
-
作者:
2016/12/17 18:47:00
5楼:
下面是Session管理的关键代码: TBaseWebModule = class(TWebModule) procedure AppWebModuleDefaultAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure WebModuleAfterDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); protected FCookieIDForSession: string; FSessionClass: TSessionClass; FSession: TBaseSession; function GetUniqueSessionID: string; virtual; procedure OpenSession; procedure CloseSession; procedure SerializeSession; virtual; procedure DeserializeSession(const ASessionID: string); virtual; public property SessionClass: TSessionClass read FSessionClass; constructor Create(AOwner: TComponent); override; destructor Destroy; override; function EchoIncoming: string; end; procedure TBaseWebModule.OpenSession; var cSessionID: string; procedure SaveSessionIDToClient; var LCookie: TStringList; begin LCookie := TStringList.Create; LCookie.Add(FCookieIDForSession + '=' + cSessionID); Response.SetCookieField(LCookie, '', '', {$IFDEF ISAPI} -1{$ELSE}0{$ENDIF}, False); LCookie.Free; end; begin if not Assigned(FSession) then FSession := FSessionClass.Create(Self); cSessionID := Request.CookieFields.Values[FCookieIDForSession]; if Length(cSessionID) = 0 then begin cSessionID := GetUniqueSessionID; SaveSessionIDToClient; FSession.Clear; end else begin DeserializeSession(cSessionID); FSession.Modified := False; end; FSession.SessionID := cSessionID; end; procedure TBaseWebModule.CloseSession; begin if FSession.Modified then begin SerializeSession; FSession.Modified := False; end; end;
----------------------------------------------
-
作者:
2016/12/17 18:53:49
6楼:
这是后端路由的写法: RouteMap('GET', '/rest/captcha', function(const Caller: TWebModule; const Request: TWebRequest; const Response: TWebResponse): Boolean var cs: TCaptchaStream; Self: TAppWebModule absolute Caller; begin cs := Captcha(RGB($F5, $F5, $F5)); Self.Session.Captcha := cs.Captcha; Response.ContentType := cs.ContentType; Response.ContentStream := cs; Result := True; end); RouteMap('GET', '/rest/login', function(const Caller: TWebModule; const Request: TWebRequest; const Response: TWebResponse): Boolean var cUserId, cUserPwd, cCaptcha: string; jo: TJSONObject; Session: TSession; Self: TAppWebModule absolute Caller; begin Session := Self.Session; jo := TJSONObject.Create; cCaptcha := Request.QueryFields.Values['captcha']; if not SameText(cCaptcha, Session.Captcha) then begin jo.S['errorMsg'] := ' 验证码有误,请重新输入!'; jo.B['logined'] := False; end else begin cUserId := Request.QueryFields.Values['userId']; cUserPwd := Request.QueryFields.Values['userPwd']; if Session.Login(cUserId, cUserPwd) then begin jo.B['logined'] := True; jo.S['userId'] := cUserId; jo.S['userRole'] := Session.RoleName; jo.S['startPage'] := Session.StartPage; end else begin jo.B['logined'] := False; jo.S['errorMsg'] := Session.LoginFailMsg; end; end; Response.Content := jo.ToJSon(); Response.ContentType := 'application/json; charset=utf-8'; jo.Free; Result := True; end); RouteMap('GET', '/rest/TChangePwd', function(const Caller: TWebModule; const Request: TWebRequest; const Response: TWebResponse): Boolean var cAsk: string; jo, js : TJSONObject; Self: TAppWebModule absolute Caller; begin jo := TJSONObject.Create; cAsk := Request.QueryFields.Values['ask']; if cAsk = 'startInfo' then begin js := TJSONObject.Create; js.S['mainMenu'] := Self.MainMenu('TChangePwd.html'); jo.O['elmHtmList'] := js; end; Response.Content := jo.ToJSon(); Response.ContentType := 'application/json; charset=utf-8'; jo.Free; Result := True; end); RouteMap('POST', '/rest/TChangePwd', function(const Caller: TWebModule; const Request: TWebRequest; const Response: TWebResponse): Boolean var cAsk, cOldPwd, cNewPwd, cCaptcha: string; jo: TJSONObject; Session: TSession; Self: TAppWebModule absolute Caller; begin Session := Self.Session; jo := TJSONObject.Create; cAsk := Request.QueryFields.Values['ask']; cCaptcha := Request.ContentFields.Values['captcha']; if not SameText(cCaptcha, Session.Captcha) then begin jo.S['errorMsg'] := '验证码有误,请重新输入!'; end else begin cOldPwd := Request.ContentFields.Values['oldPwd']; cNewPwd := Request.ContentFields.Values['newPwd']; if cOldPwd <> Session.Password then jo.S['errorMsg'] := '原密码有误,请重新输入!' else begin Session.ChangePassword(cNewPwd); jo.S['okMsg'] := '密码更改成功,下次登录请使用新密码!'; end; end; Response.Content := jo.ToJSon(); Response.ContentType := 'application/json; charset=utf-8'; jo.Free; Result := True; end);
----------------------------------------------
-
作者:
2016/12/17 19:00:14
7楼:
下面是SQL Server数据库session管理的表与储存过程: IF EXISTS(SELECT 1 FROM sysobjects WHERE name='appSessions' AND type='U' AND uid=user_id('dbo')) DROP TABLE dbo.appSessions GO CREATE TABLE dbo.appSessions( sid VARCHAR(40) NOT NULL, session VARCHAR(8000) NOT NULL, expires DATETIME NULL, CONSTRAINT pk_appSessions PRIMARY KEY(sid) ) GO IF EXISTS(SELECT 1 FROM sysobjects WHERE name='spSessionExists' AND type='P' AND uid=user_id('dbo')) DROP PROCEDURE dbo.spSessionExists GO CREATE PROCEDURE dbo.spSessionExists @sid VARCHAR(40), @exists BIT OUTPUT WITH ENCRYPTION AS SET NOCOUNT ON SET @exists=0 IF EXISTS(SELECT 1 FROM dbo.appSessions WHERE sid=@sid) SET @exists=1 SET NOCOUNT OFF GO IF EXISTS(SELECT 1 FROM sysobjects WHERE name='spSessionPurge' AND type='P' AND uid=user_id('dbo')) DROP PROCEDURE dbo.spSessionPurge GO CREATE PROCEDURE dbo.spSessionPurge WITH ENCRYPTION AS SET NOCOUNT ON delete dbo.appSessions WHERE expires<GETDATE() SET NOCOUNT OFF GO IF EXISTS(SELECT 1 FROM sysobjects WHERE name='spSessionGet' AND type='P' AND uid=user_id('dbo')) DROP PROCEDURE dbo.spSessionGet GO CREATE PROCEDURE dbo.spSessionGet @sid VARCHAR(40), @session VARCHAR(8000) OUTPUT WITH ENCRYPTION AS SET NOCOUNT ON DECLARE @expires DATETIME SELECT @session=session,@expires=expires FROM dbo.appSessions WHERE sid=@sid IF @expires<GETDATE() BEGIN SET @session=NULL DELETE dbo.appSessions WHERE sid=@sid END ELSE UPDATE dbo.appSessions SET expires=GETDATE()+1 WHERE sid=@sid SET NOCOUNT OFF GO IF EXISTS(SELECT 1 FROM sysobjects WHERE name='spSessionSet' AND type='P' AND uid=user_id('dbo')) DROP PROCEDURE dbo.spSessionSet GO CREATE PROCEDURE dbo.spSessionSet @sid VARCHAR(40), @session VARCHAR(8000) WITH ENCRYPTION AS SET NOCOUNT ON DECLARE @expires DATETIME SET @expires=GETDATE()+1 IF EXISTS(SELECT 1 FROM dbo.appSessions WHERE sid=@sid) BEGIN UPDATE dbo.appSessions SET session=@session,expires=@expires WHERE sid=@sid END ELSE INSERT INTO dbo.appSessions VALUES(@sid,@session,@expires) SET NOCOUNT OFF GO
----------------------------------------------
-
作者:
2016/12/17 20:42:25
8楼:
来个demo?
----------------------------------------------
-
作者:
2016/12/17 20:44:04
9楼:
这两个被毙掉的都是可视化组件拖放开发的,没有门槛直接进入,你说的却不可以,难度高多了。
----------------------------------------------
-
作者:
2016/12/17 21:17:41
10楼:
非常感谢c5soft马上回复这个session非常实用的解决方法,这个好贴造福delpher
----------------------------------------------
-
作者:
2016/12/17 21:20:34
10楼:
从入门走向专业,迈过几道门槛是必须的。迈过门槛,展现在眼前的是一片风光无限的自由天地。
----------------------------------------------
-
作者:
2016/12/17 23:22:53
11楼:
肖老尸,session和路由还可以参考下DelphiMVCFramework https://github.com/danieleteti/delphimvcframework ,这个框架正在把system.json换成jsondataobject ,进一步提升性能,而且这个框架的restful也很不错。 另外就是session存数据库对性能影响还是很大吧,改用redis可行不 https://github.com/danieleteti/delphiredisclient
----------------------------------------------
-
作者:
2016/12/17 23:38:20
12楼:
delphimvcframework是个不错的框架,就是稍微复杂了一点。我的这个设计非常精简,核心代码不到500行。delphi服务端负责返回的主要是JSON数据+少量的动态图片(验证码captcha)。MVC框架交给ExtJS去做了,新版的ExtJS支持更好的MVVM框架(数据双向绑定,与Angular相同)。 ExtJS是一个单页面应用(SPA),前端的页面跳转通过视图切换实现。我这里所说的路由不过是不同的取数路径而已。 session用redis当然没问题了。我用sql server主要是降低服务器构建的复杂性。为了避免性能损失,session只在数据发生变化时才写入后端数据库。 实践中使用UniDAC,没发现因为session的读写影响了应用的速度。UniDAC的DBMonitor对监控ISAPI的数据读写情况非常有帮助。
----------------------------------------------
-
作者:
2016/12/18 10:49:32
13楼:
dmvc 也是基于webbroker的 性能堪忧。。。 synopse 框架基于http.sys
----------------------------------------------
五毒公主 认准了delphi ,没经历学更多 就努力成功delphi高手吧
作者:
2016/12/18 12:58:15
14楼:
1314tim 为什么说性能堪忧?能具体说出原因,依据是什么呢?
----------------------------------------------
-
作者:
2016/12/18 14:50:02
15楼:
webbroker如果编译成exe以StandAlone方式运行,因为网络底层用的是indy的多线程模式,性能上与intraweb无异。如果将webbroker编译成isapi的dll,放到iis上运行,就能充分发挥http.sys的威力了。
----------------------------------------------
-
作者:
2016/12/18 19:53:42
16楼:
intraweb 编译成isapi的dll,放到iis上运行,连续运行一段时间后,内存会不断上升,全过程内存占用只增不降,到达2G左右时,运行速度会明显下降,上网查了一下,好象不是只有intraweb才会这样,其它的程序在iis也会有这样的现象。打开数据纪录多的表,反复打开关闭这个现象很容易出来。不知道这个webbroker isapi的dll,放到iis上运行 会不会有这种内存占用大的现象?
----------------------------------------------
-
作者:
2016/12/18 20:07:34
17楼:
毙掉UniGUI?你的开发库敢卖899美元吗?会有人买吗? UniGUI作者的水平不敢说深不可测,至少也是非常专心的钻研Delphi技术,并且好多年只做一件事情。
----------------------------------------------
只有偏执狂才能生存!
作者:
2016/12/18 20:56:05
18楼:
…… 被禁用帐号,帖子内容自动屏蔽! ……
----------------------------------------------
发布广告,禁用帐号!
作者:
2016/12/18 21:44:37
19楼:
必须支持
----------------------------------------------
我和我追逐的梦,擦肩而过
作者:
2016/12/18 22:55:23
20楼:
UniGUI的卖点是ExtPascal,我不觉得ExtPascal会比ExtJS方便多少。 ExtJS到6.X把桌面的ExtJS5.X与移动端的Touch 2.X合并,提取两者的公共部分,取名ExtJS-Core,ExtJS5.X界面部分取名ExtJS-Classic, Touch2.X界面部分取名ExtJS-Modern。UniGUI要跟上Sencha的节奏,是不是也来一个ExtPascal-Core/Classic/Modern啊? 使用UniGUI的好处是不必学Javascript, 做Web开发,不精通Javascript,能搞出像样的产品吗?既然JavaScript是必须迈过的门槛,还要ExtPascal干嘛? 我看UniGUI做的事情是在重复仿造轮子,注定搞不利索。为什么迟迟没有推出1.0版本,ExtJS老在变,ExtPascal跟不上节奏啊。 我的方案是Delphi只提供数据服务,所有的页面都交给前端。前端面前最靠谱的框架非ExtJS莫属。后端用Delphi写ISAPI也靠谱。工作量来说,前端80%,后端20%。保留Delphi主要是存取数据库方便,还有FastReport可以做复杂的报表。既然精通Javascript了,服务器换成Linux的话, 后端直接Nodejs,咱们把服务端逻辑大部分保留在数据库的储存过程中,Delphi与Nodejs切换也是几个工作日就能搞定的事情。 UniGUI卖得贵,那是因为ExtJS的商用授权贵,水涨船高。 咱们做开发,不图钱,图个乐。必要的时候可以开源。
----------------------------------------------
-
作者:
bdl1 (bdl1)
▲▲▲▲▲
-
普通会员
2016/12/19 7:57:36
21楼:
如果webBroker直接用http.sys,那这个方案就更完美了!
----------------------------------------------
-我的博客
作者:
2016/12/19 9:14:59
22楼:
为啥不用vue.js??
----------------------------------------------
QQ: 9717005 我的Blog:http://www.cnblogs.com/anydelphi/
作者:
akay (akay)
★☆☆☆☆
-
普通会员
2016/12/19 9:44:42
23楼:
WEB的前端,那么多年来,都没有什么更好的解决方案。大家多讨论下,或许能有个好方案出来。
----------------------------------------------
-
作者:
2016/12/19 10:05:13
24楼:
看到楼主的文章 我再提出个方案 WEB开发:ExtJS+WebBroker C/S开发: FMX+WebBroker WEBBROKER结合IIS实现HTTP.SYS WEBBROKER结合APACHE部置到LINUX SERVER 我好像看到了DELPHI的未来
----------------------------------------------
我为人人为我
作者:
2016/12/19 10:16:19
25楼:
不管是C/S 不管是B/S 不管是客户端 不管是服务端 DELPHI全面跨平面台
----------------------------------------------
我为人人为我
作者:
2016/12/19 10:47:12
26楼:
EXTJS 楼主说的好 WEB开发不管用JAVA ASP.NET INTRAWEB JavaScript是必须迈过的门槛. 以前我一直把JAVASCRIPT这种解析执行的语言当成妾,把DELPHI当成妻.可这年头妾大有反身当主人,没办法. 但话说回来 妻都可操 这妾你就操不了吗
----------------------------------------------
我为人人为我
作者:
akay (akay)
★☆☆☆☆
-
普通会员
2016/12/19 10:55:34
27楼:
我现在服务器端用php,前端用FMX,WEB端目前用php,但感觉开发效率还是低了。
----------------------------------------------
-
作者:
2016/12/19 10:59:02
27楼:
请问c5soft 大神,intraweb 用 iis 发布 isapi,web前端用post 的方式 发送json数据到服务器,intraewb无法获取数据。但是如果用 get 就可以接收到数据。是iis没有设置好吗,能否告知? 代码如下: $.ajax({ type: "post", url: "cgsp.php", data: {id:id,tiaoma:tiaoma,leixing:leixing}, dataType: "json", success: function(msg){ } });
----------------------------------------------
-
作者:
2016/12/19 15:10:19
28楼:
前端开发我使用Qooxdoo,这个和delphi最接近。
----------------------------------------------
-
作者:
2016/12/19 17:29:54
29楼:
ExtJS+WebBroker搭建Web应用开发框架 具体如何操作 能讲讲吗
----------------------------------------------
我为人人为我
作者:
2016/12/19 17:53:39
30楼:
下一版支持Linux开发,应该是Web开发优先的。 感觉现在的方案都是鱼肠小道,等EMB出大招吧。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
2016/12/19 17:54:45
31楼:
不过,佩服c5soft的探索精神。 这是每个程序员都应该具备的精神。
----------------------------------------------
喜欢Delphi,关注Delphi,愿和广大爱好者交朋友。
作者:
2016/12/19 18:06:27
32楼:
@oyj212 装一个HttpAnalyzer,监控一下http通讯的数据流,能有效的排除各种bug。
----------------------------------------------
-
作者:
star5 (星五)
★☆☆☆☆
-
盒子活跃会员
2016/12/19 18:28:52
33楼:
不如抛弃ExtJS来的直接。
----------------------------------------------
博客 - http://offeu.com 脚本模型 - http://webpascal.com 需要短信接口的请联系我,可发行业与营销内容。
作者:
2016/12/19 23:17:01
34楼:
老师能不能能提供个教程之类的学习下
----------------------------------------------
-
作者:
2016/12/19 23:38:37
35楼:
先从ExtJS学起吧,网上找的ExtJS多是老版本的,以ExtJS 4.X居多,要学肯定是学ExtJS 6.X。这本书本人正在研读: Ext JS 6 By Example(PACKT,2015) 附PDF
----------------------------------------------
-
作者:
2016/12/19 23:59:58
36楼:
尊重在delphi web 开发路上勇于创新的人! 以前试过UniGUI是基于ExtJS 在局域上速度还可以,在外网上速度有点慢。 asp.net 的ExtJS速度也慢。 请问老师: 不知WebBroker+ExtJS速度咋样?
----------------------------------------------
作者:
2016/12/20 8:30:55
37楼:
说ExtJS慢,是ExtJS启动慢,即第一次加载的时候慢。ExtJS是为Rich Internet Application准备的,首次运行的时候需要加载一个较大javascript文件,桌面压缩前差不多是2M,压缩后是500K, 手机端压缩前1M,压缩后300K。这个是后台搭配任何服务器环境都绕不开的现象。随着网络带宽的扩展,这已经不是问题了。当然,ExtJS更适合做Intranet Web开发,用于企业内部ERP系统,这里网速完全可控。
----------------------------------------------
-
作者:
2016/12/20 8:34:40
38楼:
谢谢!经验之谈。 是的,随着网络带宽的扩展,手机性能的增加,这个应该不是问题了。 ExtJS的Grid还是挺好的,特别适合企业复杂的系统,下次试一下。
----------------------------------------------
作者:
2016/12/20 9:07:44
39楼:
这个是刚看到的介绍ExtJS 6的中文资料,是zhoudawn@163.com的呕心之作,40页的word文档,是很好的ExtJS入门读物。
----------------------------------------------
-
作者:
2016/12/20 10:44:34
40楼:
ExtJS+WebBroker搭建Web应用开发框架
----------------------------------------------
我为人人为我
作者:
2016/12/20 10:45:24
41楼:
万事开头难 ExtJS+WebBroker怎样搭建Web应用开发框架?
----------------------------------------------
我为人人为我
作者:
2016/12/20 10:54:42
42楼:
这两个被毙掉的都是可视化组件拖放开发的,没有门槛直接进入,你说的却不可以,难度高多了。
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
作者:
2016/12/20 22:19:42
43楼:
ExtJS开发坏境带可视化组件,同样支持拖放开发,事件代码编写,与Delphi坏境极为相识。这个产品叫Sencha Architect。
----------------------------------------------
-
作者:
gdsa (文稠紧)
★☆☆☆☆
-
盒子活跃会员
2016/12/20 22:30:42
43楼:
EXTJS曾经的最爱,,很欣赏其面向对象的封装结构、语法风格,,,,但终因其庞大的架构,对我之后的应用来说,臃肿的体型,,,放弃了 且高版本玩玩可以,,正式部署也有法律风险,,买吧,,,也不便宜。。。(记得曾经为了一个TREE,低版本中没有、不完善,还要想办法去找其它的JS包来引入解决) 目前IW+EASYUI的模式,用着爽的很,轻量简洁,,IW现成的后台WEB管理也让我省心不少,,,效率极高。。。。。对我的需求来说,暂无其它方案更能吸引我。。。。。。。。^_^
----------------------------------------------
-
作者:
gdsa (文稠紧)
★☆☆☆☆
-
盒子活跃会员
2016/12/20 22:50:36
44楼:
今天恰巧用我搭建的系统在单位搞了上机考试,,,效果不错、领导认可。。。^_^
此帖子包含附件: 大小: 777.0K
----------------------------------------------
-
作者:
gdsa (文稠紧)
★☆☆☆☆
-
盒子活跃会员
2016/12/20 22:51:31
45楼:
全天上百人次的考试下来,消耗的资源也才19M,,,如果没有用IW、EASYUI前后台分离的模式,,用IW原生的那一套组件,,远不止这个数....
此帖子包含附件: 大小: 9.8K
----------------------------------------------
-
作者:
2016/12/21 0:35:25
46楼:
佩服c5soft (走遍天下)老师在Delphi开发web方面的探索。 一般人感觉还是学PHP吧
----------------------------------------------
-
作者:
2016/12/21 9:19:22
47楼:
ExtJS 离线文档下载地址,含6.2版 http://docs.sencha.com/misc/guides/offline_docs.html
----------------------------------------------
-
作者:
bdl1 (bdl1)
▲▲▲▲▲
-
普通会员
2016/12/27 11:43:25
48楼:
这个需要顶!
----------------------------------------------
-我的博客
作者:
2016/12/27 12:24:29
49楼:
好多年前,QuickBurro就已经支持ExtJS了 Delphi支持这些基于HTML5/JS/CSS的前端框架,还是很容易的 截图:
此帖子包含附件: 大小: 401.1K
----------------------------------------------
樵夫的大马甲
作者:
2016/12/27 12:26:17
50楼:
支持HTML5的案例: http://www.quickburro.org/
----------------------------------------------
樵夫的大马甲
作者:
llf (天天打)
★☆☆☆☆
-
盒子活跃会员
2017/1/3 16:17:30
51楼:
gdsa ,用的是以前盒子上的那个iw + easyui的方法吗?感觉这篇文章之后,就没有下文了,你有新的demo可以学习吗?谢谢!
----------------------------------------------
-
作者:
2017/1/3 17:25:25
52楼:
搞delphi的都是一班老家伙了,拿着javascript、ExtJS+WebBroker这些东西做项目,累得老骨头会散架的。还是用iw算了。
----------------------------------------------
-
作者:
2017/1/19 15:16:38
53楼:
去除ExtJS Trial水印: \Path\To\ext-6.2.1\classic\theme-base\sass\etc\all.scss $ext-trial: true => $ext-trial: flase \Path\To\ext-6.2.1\modern\theme-base\sass\etc\all.scss $ext-trial: true => $ext-trial: flase \Path\To\ext-6.2.1\build\etx.js license:"trial" => license:"commercial"
----------------------------------------------
-
作者:
2017/4/9 23:33:51
54楼:
非常佩服楼主的创新精神! 以前一直也是进行传统的桌面应用开发,工作的原因现在也需要考虑前端开发,这个对类似我这些人来说,是一个非常艰苦的过程,现在请容许我这个前端新人请教一下楼主一个问题,就是在前端中如果处理数据集的问题,就我们在传统的桌面应用中,比如我们要做一个开销售单的业务模块,一个销售单可能需要涉及多个数据集,例如用ClientDataSet,这些数据集一般是临时保存数据在内存,到最后才一起批量提交到服务器进行保存;还有就是一些业务逻辑的处理可能还需要对数据集进行遍历和进行修改等等,比如 with cds do begin first; while not eof do edit; fieldbyname(‘aaa’).AsString := 'asdasd'; ..... next; end; end; 类似这个这些我们非常熟悉的做法,那么到了ExtJS等前端中有类型的做法吗? 谢谢!
----------------------------------------------
-
作者:
2017/4/10 9:59:07
55楼:
这个前端处理叫AJAX,Asynchronous Javascript And XML或者AJAJ,Asynchronous Javascript And JSON,比ClientDataSet做得更好,ClientDataSet与后台通讯是阻塞式同步(Synchronous)操作,在得到服务器响应前前端需要等待,AJAX与后台通讯是非阻塞异步(Asynchronous)模式,是无等待的回调机制。说得直白一点就是,前端需要数据的时候请求服务器发送一段XML或JSON格式的字符串,收到后将数据解析并处理数据,比如显示到网页的DBGrid中,数据发生更改后向服务器发送一段涉及变更记录的XML或JSON格式的字符串,用于更新后台数据库。 ExtJS采用了MVC/MVVM框架,AJAX直接包装到M中了,比用Delphi写程序更方便。 ExtJS的AJAX服务包装在Ext.Json模块中,下面以系统登录javascript片段为例,展示一下AJAX调用形式: ... data = fm.getValues(); Ext.Ajax.request({ method: 'GET', url: "/rest/login", headers: { 'Application': 'PayHelper' }, params: data, success: function (response, options) { console.log('从服务端获取结果: ' + response.responseText); var obj = Ext.JSON.decode(response.responseText); if (obj.logined) { ... this.getView().destroy(); PayHelper.getApplication().switchView("app-main"); } else { Ext.Msg.alert('登录失败', obj.errorMsg); } }, failure: function (response, options) { Ext.Msg.alert('登录失败', '错误编号:' + response.status); }, timeout: 1 * 1000 });
----------------------------------------------
-
作者:
2017/4/10 15:31:49
56楼:
非常感谢楼主的指教,这样就感觉更加有信心了,再请教一下楼主,楼主您在做前端的时候使用哪些开发工具啊?(我认为好的工具可以事半功倍)
----------------------------------------------
-
作者:
2017/4/10 15:38:54
57楼:
还有楼主,我们知道ClientDataSet 有个Delta,可以单独把变更过的数据提交到服务器,而不是把所有的数据提交到服务器,这样的目的主要是为了提交性能,不知道前端里是否有这样的机制?
----------------------------------------------
-
作者:
2017/4/10 19:49:11
58楼:
一、前端工具: 1.Sencha Architect,一个类似Delphi的集成开发工具。 2.IntelliJ IDEA/WebStorm+Sencha JetBrains Plugin+Sencha Cmd, 最好的Javascript编程工具。这是我目前使用的工具。 二、有关ClientDataset类比: 在ExtJS中有一个Ext.data.Store类,与TClientDataset相识,store的结构用model定义,store的数据由若干record组成,每个record有一个crudState用来表明这条记录是未更改的数据,还是已更改的,或是新插入的,亦或是已删除的。store有rejectChanges与commitChanges两个方法用于放弃所有的修改与提交所有的修改,这两个方法都是针对需要提交的数据(Delta)的。
----------------------------------------------
-
作者:
2017/4/10 20:19:24
59楼:
楼主不但技术好,人更好,再次感谢楼主的指导!!!
----------------------------------------------
-
作者:
2017/4/25 10:34:31
60楼:
楼主,再请教一下,目前配合ExtJS 6.2 哪个版本的Sencha Architect好用?有分享地址吗?
----------------------------------------------
-
作者:
2017/4/25 12:52:33
61楼:
楼主好人一枚,顶!
----------------------------------------------
==========
作者:
2017/4/25 14:12:34
62楼:
@goodboysoft 直接下载官方的最新试用版,4.2版吧,30天过期后,就电脑日期改成开始试用的日子,永久使用。
----------------------------------------------
-
作者:
2017/4/25 14:25:03
63楼:
最新动态: 做web开发,Delphi干脆不用了。前后端都用Javascript。前端ExtJS6.2+后端Nodejs6.10.2。Nodejs已经99%支持ECMAScript 6.0,ExtJS将在下一版全面支持ES6。 ES6的新特征非常好用,爽死了。 开发环境使用JetBrains的Intelij IDEA+Sencha JetBrains Plugin。
----------------------------------------------
-
作者:
akay (akay)
★☆☆☆☆
-
普通会员
2017/4/25 14:58:08
64楼:
感觉采用React更好。
----------------------------------------------
-
作者:
chro (chro)
★☆☆☆☆
-
普通会员
2017/4/25 15:51:21
65楼:
恭喜楼主走上了正路
----------------------------------------------
-
作者:
2017/4/25 18:03:27
66楼:
楼主,讲讲用html5builder做web的优缺点
----------------------------------------------
-
作者:
2017/4/25 18:16:11
67楼:
端Nodejs6.10.2 楼主,这个作为服务器端,跟用Dephi写的服务器端,比如写WebService的方式,哪个性能好些,有实际测试过吗?
----------------------------------------------
-
作者:
2017/4/25 22:44:57
68楼:
Delphi写ISAPI的DLL,加载到IIS下,有http.sys的加持,速度、稳定性、并发都没问题。麻烦的是调试,需要Nginx+WebBroker StandAlone来调试。 换成Nodejs,发布更方便,并能支持Linux,调试也方便。速度比IIS明显快。代码写起来也更高效,ES6吸收了很多现代编程语言(Scala/Rust)的特征,如箭头函数,模式匹配、字符串模板等等。Delphi在语言层面上这几年一直没有进步。也难怪,Delphi的发明人跑去弄C#了,结果C#速度没有可能快起来,虚拟机上跑嘛,怎么可能跟Native Code比,他又弄出个Typescript,有了ES6/ES7,估计Typescript也会流产。是钱,害了人,也害了Delphi。 为什么不用PHP?满喜欢PHP7的进步的,可惜我要用SQL Server数据库,尼玛微软PHP的驱动汉字处理一直没解决好(汉字表名、字段名)。不过PHP根上是多线程的,在并发方面没有Node来得高效,就好比apache与Nginx的区别。 为什么不用React? 我要做手机开发,发现目前手机端的DBGrid,唯一成熟的只有Extjs。 几年前就用Nodejs做了一个项目,Express框架,运行中发现一些Bug很难跟踪,改成Delphi了。那个时候ES6还没有得到完全支持。总结上次的教训,这次换回Nodejs,第三方模块尽量少用。因为MVC/MVVM架构用Extjs的,Nodejs仅提供JSON数据服务,Express都不用,只用Router,后台Session管理自己写。 Nodejs是单线程的,在pm2的管理下,可在同一监听端口启动多份node线程,充分发挥多核服务器的威力。
----------------------------------------------
-
作者:
2017/4/26 20:27:30
69楼:
楼主真是见多识广,大牛人一个,楼主的意见和建议可以让我们这些后来者少走弯路,非常感谢!
----------------------------------------------
-
作者:
dunken (dunken)
★☆☆☆☆
-
盒子活跃会员
2017/4/28 9:18:53
70楼:
顶
----------------------------------------------
-
作者:
2017/5/4 15:01:09
71楼:
Session的控制貌似用了许多三方控件 不知有无 Demo 可以参考下?
----------------------------------------------
-
作者:
2017/5/22 19:41:34
72楼:
为什么不用React? 我要做手机开发,发现目前手机端的DBGrid,唯一成熟的只有Extjs。? 楼主, 不知道ExtJS开发的手机App 是否能实现二维码扫描\定位等功能?
----------------------------------------------
-
作者:
2017/5/23 9:07:27
73楼:
理论上讲:ExtJS+cordova(phonegap)调用手机的Native API可以实现这些功能。 http://docs.sencha.com/cmd/guides/cordova_phonegap.html http://blog.csdn.net/lovelyelfpop/article/details/20392377
----------------------------------------------
-
作者:
2017/5/24 13:12:22
74楼:
感谢楼主指引,我要好好看看这些资料!
----------------------------------------------
-
作者:
2017/5/24 21:35:54
75楼:
最近在研究webbroker,可否发个webbroker+extjs的demo给我? 我邮箱83230193@qq.com 谢谢你
----------------------------------------------
-
作者:
2017/5/25 8:50:54
76楼:
@kill2me 抱歉,没有做过demo,很遗憾没有那个闲暇时间。 目前在线的项目是WebBroker+WYSIWYG Web Builder做的,极稳定。 Nodejs+ExtJS的产品已投入生产了,手机与桌面共享大部分代码,很爽。ExtJS升级到官方刚刚发布的6.5.0.775版,可是不UniGUI中的4.X版。 如果不愿意摸Nodejs,WebBroker+ExtJS也是完全可行的,等你把ExtJS玩熟练了,javascript语言也应该得心应手了,后台换成Node很自然。PHP,JSP(Tomcat),ASP.NET就别碰了,在下都替您一一领教过了,没有哪家能比Nodejs用起来顺手。唯一让人心动的是rust语言,为多核cpu设计的native code,这是未来之星,这里边有nickel框架,很吸引银球。
----------------------------------------------
-
作者:
2017/5/31 20:26:59
77楼:
向楼主请教两个低级问题: 1、Node.js 用作服务器段时可以像Delphi通过编译或者类似的方式来保护自己的程序不泄漏源代码吗? 2、可以访问一些USB设备吗?比如通过USB加密狗来进行授权控制。
----------------------------------------------
-