论坛首页 Web前端技术论坛

问个问题,感觉大家都不看好javascript模板,为什么?

浏览 13296 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-28  
to stone:
偶的错,偶不是java程序员,没有细看GWT的资料,只是平感觉以为是后台的模板。
偶错了。
0 请登录后投票
   发表时间:2008-04-28  
借用别人的话:

leebai 写道

如果新的 HTML Specification 能包含treeview、listview、grid。。。等大粒度组件,web UI模式之争其实没有任何悬念,甚至RIA都不是对手(flex/javafx等要达到HTML/CSS同等的表达能力几乎是不可完成的任务,如果达到了,就是另外一个浏览器引擎了),虽然多媒体及图形方面RIA将会保持自己的价值。

在HTML升级之前,我认为最好的办法是以现有的,形式最接近的HTML元素为骨架,组合其他合适的HTML元素,通过扩充骨架HTML元素的属性、方法、事件,来构造大粒度的UI组件。目前的7wx组件已经很老了,新版本将会融合近来的一些想法,应该会有比较大的更新。


非常赞同。实际上我觉得有了HTML5,基本上客户端模板就没有用武之地了。所以还不如做一个框架来在早期浏览器上实现HTML5。
0 请登录后投票
   发表时间:2008-04-28  
其实考虑客户端template,有一个技术可以做参考,就是xslt。数年前,我们都推崇过在前端用xslt。但是实际这么多年用下来发现它并不能解决前端web开发的问题。除了xslt本身冗长和某些能力的欠缺之外,更重要的原因还是在于前端模板技术并不能解决web前端开发的根本问题,反而有可能加剧复杂性。
0 请登录后投票
   发表时间:2008-04-30  
不管热不热,js将在项目中留存一段时间的。
0 请登录后投票
   发表时间:2008-05-02  
个人理解,B/S模式就是C/S模式的特例,只是将客户端放在了浏览器里。可是现在的开发模式就非要把本该在客户端做的事情放到服务器里做,导致开发异常复杂混乱。我经常在跟同事讨论问题的时候,发现有人会搞不清楚一段代码到底是在服务器执行还是在浏览器执行。因为现在的框架完全模糊化了这些概念。

我是从做DELPHI转过来做JAVA WEB开发的。我总有个想法,就是重视起浏览器端的JS开发,将其定位成WEB的客户端开发。最终实现一个类似VCL的界面组件框架,和类似DELPHI的可视化IDE,这样才能简化WEB界面的开发,提高效率。浏览器客户端与服务器端通过HTTP协议承载两者交互通信,再上层可以用XML封装复杂数据。这样才能将服务器与客户端开发解藕,达到分工明确,降低开发难度,提高效率的目的。否则以目前的开发方式,不管用什么STRUCT、JSF,都只会更增加复杂性,WEB开发的效率永远都不可能超过C/S的。
0 请登录后投票
   发表时间:2008-05-02  
mobilefeather 写道
个人理解,B/S模式就是C/S模式的特例,只是将客户端放在了浏览器里。可是现在的开发模式就非要把本该在客户端做的事情放到服务器里做,导致开发异常复杂混乱。我经常在跟同事讨论问题的时候,发现有人会搞不清楚一段代码到底是在服务器执行还是在浏览器执行。因为现在的框架完全模糊化了这些概念。

我是从做DELPHI转过来做JAVA WEB开发的。我总有个想法,就是重视起浏览器端的JS开发,将其定位成WEB的客户端开发。最终实现一个类似VCL的界面组件框架,和类似DELPHI的可视化IDE,这样才能简化WEB界面的开发,提高效率。浏览器客户端与服务器端通过HTTP协议承载两者交互通信,再上层可以用XML封装复杂数据。这样才能将服务器与客户端开发解藕,达到分工明确,降低开发难度,提高效率的目的。否则以目前的开发方式,不管用什么STRUCT、JSF,都只会更增加复杂性,WEB开发的效率永远都不可能超过C/S的。

你可真敢说,我有这样的想法,可我就不敢说,
因为我讨厌对立的争论,对立的争论没有任何价值,
你敢,不过我建议你,如果别人反对你的观点的话,不要和他们争论,99%你是说服不了别人的,那不就是浪费生命,
我们连自己都救不了,别人就不要管了,
还有就是,既然我们在B/S要分离这上面有共识,
那我说说我在实战中的感受。
首先,这个观点的产生是实践的来的,虽然我做web开发只有2年时间,可是我的程序年龄已经13年了,
这13年中当然也不是一直在做程序,也荒废了几年,不过我一直都把自己当作是程序员的,就算荒废的几年也一直在学习。
自吹一下,有13年程序年龄的人,产生出一些观点,应该不是空穴来风吧。
在这两年的web开发中其实我有1年时间做的是服务器端的插件和内容的负载均衡的工作,页面上的事情这1年当中我没有做,以至于最开始做页面的时候,我认为很简单的东西,最初要做的是一个简单的论坛,我就想当然的认为,这么简单的需求,比起我原来用delphi做的帐务管理系统来说太简单了,只需要1周就可以完成,可事实是我用1天的时间规划建立了数据库结构,数据结构有了其实最基础的业务逻辑也就出来了,细节是实现时候处理的。可剩下的6天困死在页面上了。
当然造成这个局面的原因就是我低估了页面的复杂度。这个项目自然就流产了。
再后来的1年多里,我下功夫的学习了web的开发,html,DOM,css,javascript,结果就是我发现:
web开发实际上重头的工作在表现上,真正后台的代码很少,可以说,后台很多有难度的代码都是为表现做的,
为什么不能吧前台的活交给前台去做?后台的活交给后台去做?
现在有这样的工具比如前面有朋友说的GWT,
可是我仍然不赞同这种观点,为什么不构造一个纯前台的GWT要做的工作呢(仅指前台部分)?
也许有人说:
不要重复造轮子==========开玩笑,程序员的工作就是不停的造不同的轮子,这样我们才能进步,当然策略还是要讲的,我相信不要重复造轮子这句话现在是被误用了。
搜索引擎支持问题怎么办======遇到问题就解决嘛,不要退缩,这不是程序员的工作态度,有问题我们要积极的解决他,就算现在没有完整的方案,这也不能作为我们前进的绊脚石。问题我们总能解决

还有我很实际的,既然我们有共识,那就让我们用代码说话吧!
前一段时间我做了一个前台模板语言jCT,
我困惑的是我该如何的驾驭前台模板语言来嵌入到B/S分离的实现中去,所以我开始在JE发了这几篇帖子。
现在我似乎有了解决问题的方案了。
我看到了一个inline web editor,nicEdit.
呵呵这不过是一个所见即所得编辑器,和这个有什么关系?
你仔细看nicEdit的实现,和他的代码,你会发现nicEdit里面的思想完全可以被B/S分离的思想所用。
我们看到一个工具,不应该只看到他的表现,还要看到他的思想,他的表现紧紧是他思想的一种具体体现,但肯定不局限在这一个方面。
目前我的思路有三项关键基础点:
1.前台模板语言,模板语言是个泛工具,他本质是处理程序逻辑和数据的,结果是特例的表现或UI库这个在于使用者。
2.nicEdit,他里面有很多关于对象的封装,事件的处理等内容是很有必要学习和借鉴的。
3.abc,呵呵,这个是我原创的全称是Action By Classname,就是说我们把行为直接写道标签的classname里,然后通过abc这个工具来处理。
举个ajax的例子:登陆行为
我们页面常有登陆行为,而现在处理这个的方法有3个,
1,登陆form常规提交,页面要刷新=====这个不就讨论了
2,嵌入iframe=====这个不讨论了,和我们的设计思路完全不同,
3,ajax form 提交=====就说这个,
如何完成 ajax 的提交和后台反馈数据的处理我们不关心了,因为这个并不复杂,有很多的例子可借鉴。
要讨论什么呢?讨论如何让 form ajax 行为生效?
通常的做法是,jquery代码:
$('youform').ajaxForm({具体参数});

可是这一句指令写在什么位置呢?大家都有自己的方法,也许根据具体情况的不同稍有变化,
看看我的方案,用abc的方法
<form class="abc abc.ajaxform({Q:'login'}) otherclassname">
<input />
.........
</form>

其中classname中的abc是个指示性classname,他告诉页面这个对象要进行Action By Classname的特殊处理
abc.ajaxform({Q:'login'})就是具体的处理方法了。其中的格式当然要特殊,加上一个abc.的前缀是个小技巧了,可以和otherclassname区分。
只有如何触发这个abc就简单了,无非就是先
$('.abc')

获取所有的具有abc classname的对象,然后对对象的classname里面具有abc.前缀的classname进行特殊的处理就行了。
这个方法可以运用到所有类似的情况,只是处理细节不同罢了。
举个具体的处理A连接转到ajax方法的例子:jquery语法
$.abc = {};
$.extend($.abc,{
	a:function(elm,options){
		options=options||{}
		var expr=options.expr || 'a';
			$(expr,elm).click(function(){
				var dat=($(this).attr('search') || '').slice(1);
				if (dat) 
					jsonQueue(dat);
				return false;
			});
	}
});

呵呵就是这样,里面有两个问题:
1,空格问题,因为空格是默认的classname的分界符,我们需要用其他的符号来代替,我采用的是&符号,这个问题只是提一下,具体如何合理,看你的需求和实现了,我的应用里是完全没有问题的。
2,这也就是我的jCT模板语言用+--+符号作为语法符号的原因因为,很多情况下我回在classname里直接传递用对象方法写的options,就像第一个例子中的
{Q:'login'}

一样,

在实际的项目中,我们的小组已经用这种方法工作了,效果很好,而且越发发现工作的重头仍然是页面。后台代码简单的一塌糊涂。简直就是随便来个程序员都能做。
一句话,我对B/S的分离很有信心,而且是B就是B,和S的耦合可以降到最低。

呵呵有共识我就会不停的讨论,如果只有分歧,我没有必要去说服谁,大家都有自己发展的一套理论,谁也没有给谁定性的权利呀!

很高兴在这个问题上我们有共识,顺便说一句我也是delphi程序员。
0 请登录后投票
   发表时间:2008-05-02  
忘了帖abc的实现代码了
$.extend($.fn, {
	abc: function(prefix) {
		prefix=(prefix ||'abc')+'.';
		for (var i=this.length - 1;i>=0;i--) {
		//for (var i=0 ;i<this.length;i++) {
			var cna = this[i ].className.split(/\s+/);
			var self=this[i];//预留eval做接口
			var selfjQ = $(this[i]);//预留eval做接口的jQuery对象
			for (var j=0; j<cna.length; j++) {
				if (prefix!=cna[j].slice(0,prefix.length) || cna[j].indexOf('(')<1 || cna[j].slice(cna[j].length-1)!=')') continue;
				var fn=cna[j].slice(0,cna[j].indexOf('('));
				var option=cna[j].slice(fn.length+1,cna[j].length-1);
				option=option.replace(/&/g,' ')||undefined;
				fn = fn+'(this[i],'+option+')';
				eval(('$.'+fn));
			}
		}
		this.removeClass(prefix.slice(0,-1));
	}
});

调用就变成了简单的
$('.abc').abc();

一句就触发了所有要触发的行为。很安逸的。
代码写的很随意,至于i--和i++的问题,是由于以前试验项目中的DOM对象对于事件的处理序列引起的,解释起来麻烦,不如不提.
0 请登录后投票
   发表时间:2008-05-02  


请问楼主所说的js模板指的是什么?
0 请登录后投票
   发表时间:2008-05-03  
neoliao 写道


请问楼主所说的js模板指的是什么?

偶写的前台javascript模板语言jCT:
http://code.google.com/p/jsct/
还有其他一些,最有名的就是JST了,jCT主页上有连接.
0 请登录后投票
   发表时间:2008-05-05  
我同意achun的观点。现在的很多WEB项目(只是很多) 烦人的、浪费时间的是页面。说得极端一点。用户觉得你的页面好才是好,页面不好就什么都不是。。。。
更愤怒的是 现在做的一个项目 一个门户网站 用户觉得页面的复杂性高才是好 所以加了很多ajax,真想买本书给用户看看。现在倒好 原来干干净净的代码 加上这1摩尔的随心所欲的需求 我感觉到了臃肿。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics