(转)HTC 编程思想

HTC 编程思想

春  鱼 2004-7-19

[按]
本文发表到博客园时, 使用了纯文本粘贴方法. 更改了部分格式. 可能会带来阅读上的困难.

1.摘要
本文在实例的基础上讨论了HTC(HTML Component)的编程方法,提出了一种编写脚本组件的基本模式。

2.目标读者
HTML开发人员,脚本开发人员,系统分析人员

3.背景知识
HTML, DHTML, CSS

4.引言
HTC(HTML Component)直译为HTML组件,并不是一项新技术。可是说谈不上是一门技术。实际上只是IE浏览器内置的一种脚本封装机制。由于讨论的人很少,而Microsoft也没有什么技术支持,故而应用的人很少。但是HTML有着很好的特性可以使我们的开发工作高效。并且你有可能发现,HTC或许可以改变你以往开发应用的方式。

在MSDN online对HTC的定义仅如下几句:
HTML Components (HTCs) provide a mechanism to implement components in script as Dynamic HTML (DHTML) behaviors. Saved with an .htc extension, an HTC is an HTML file that contains script and a set of HTC-specific elements that define the component.
(HTC是由HTML标记、特殊标记和脚本组成的定义了DHTML特性的组件.)

一般而言,HTC是组件化了的脚本过程。尽管引入浏览器的机制不同,但遵循相同的SDK规范。无论是脚本运行环境,还是DOM文档结构。但HTC有着极高的扩展性。也就是说,HTC可以为我们的HTML引入高级的自定义行为(behavior)。例如自定义的attribute, method, 或者事件。这就说明,我们可以使用HTC机制来开发一个有着高级特性的,可重用的,可扩展的组件。

5.实例
为了使篇幅不会太大,我们设想一个实例。话说有一天你的项目经理找到你,说客户不满意我们的项目中的用户UI设计,因为我们的客户是比较有审美情趣的人,讨厌那些windows样式的灰秃秃的按钮。所以要你设计一系列平面的,而且能随着鼠标变化颜色的按钮。你说这没问题,但是需要一天时间,不出意料地使你的项目经理惊讶之后,你解释到以你的技术水准,不可能写一堆脚本和CSS class到HTML里,你的产品一定是reusable, flexiable, 和extendable的。他答应了。于是第二天,你交给他如下源代码:

ButtonStyleFlat.htc:
另外有一个sample用于参考:
sample.html:
(分别见以下文本框)
 
ButtonStyleFlat.htc:
<PUBLIC:COMPONENT>
<PUBLIC:ATTACH EVENT="ondocumentready" ONEVENT="DoInit()" />
<PUBLIC:ATTACH EVENT="onmouseover" ONEVENT="DoMouseOver()" />
<PUBLIC:ATTACH EVENT="onmouseout" ONEVENT="DoMouseOut()" />
<PUBLIC:ATTACH EVENT="onmousedown" ONEVENT="DoMouseDown()" />
<PUBLIC:ATTACH EVENT="onmouseup" ONEVENT="DoMouseUp()" />
<PUBLIC:ATTACH EVENT="onclick" ONEVENT="DoClick()" />

<PUBLIC:PROPERTY NAME="ColorOver" />
<PUBLIC:PROPERTY NAME="ColorOut" />
<PUBLIC:PROPERTY NAME="ColorDown" />
<PUBLIC:PROPERTY NAME="ColorUp" />
<PUBLIC:PROPERTY NAME="Scheme" />

<PUBLIC:EVENT NAME="onPush" ID="push"  />

<PUBLIC:METHOD NAME="showMessage"  />

<script>
function DoInit(){
    
switch(Scheme)
{
        
case "Normal"
:
            
if(ColorOver==null) ColorOver=
'Orange';
            
if(ColorOut==null) ColorOut=
'RoyalBlue';
            
if(ColorDown==null) ColorDown=
'Black';
            
if(ColorUp==null) ColorUp=
'YellowGreen';
        
break
;
        
default
:
            
if(ColorOver==null) ColorOver=
'Orange';
            
if(ColorOut==null) ColorOut=
'RoyalBlue';
            
if(ColorDown==null) ColorDown=
'Black';
            
if(ColorUp==null) ColorUp=
'YellowGreen';
    }

    
        runtimeStyle.borderWidth
='0px';
        runtimeStyle.textAlign
=
'center';
        runtimeStyle.padding
='3
';
        runtimeStyle.verticalAlign
=
'bottom';
        runtimeStyle.color
=
'white';
        runtimeStyle.cursor
=
'hand';
        runtimeStyle.background
=
ColorOut;
        runtimeStyle.unselectable
=
'on';
}


function DoMouseOver(){
    runtimeStyle.background
=
ColorOver;
}


function DoMouseOut(){
    runtimeStyle.background
=
ColorOut;
}


function DoMouseDown(){
    runtimeStyle.background
=
ColorDown;
}


function DoMouseUp(){
    runtimeStyle.background
=
ColorUp;
}


function DoClick(){
    push.fire();
}


function showMessage(){
    alert(
"showMessage run."
);
}

</script>
</PUBLIC:COMPONENT>

 
sample.html:
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
< html >< head >< title > Sample </ title >
</ head >< body  bgcolor =#ffffff>
<button id =oButton  style ='behavior:  url(ButtonStyleFlat.htc)' > push me please </ button >
< script >
oButton.onpush
=function(){
   oButton.showMessage();
}

</ script >
</ body >

 
6.分析
让我们看看所完成的工作。我们把ButtonStyleFlat.htc和sample.html放在一起。我们打开sample.html, 效果如图:
 
图1:实际效果图
(图像不可见)

我们发现button变平了,而且鼠标经过,移开,按下,弹起动作时颜色都会发生变化,而且仔细看脚本会发现,我们可以handle一个onpush事件和调用showMessage()方法。
这一切的变化都来自style='behavior:url(ButtonStyleFlat.htc)', 一个behavior声明。而不用在HTML中写任何脚本。我们不探讨behavior的用法,仅仅讲解如何开发一个完整的HTC。

一个完整的HTC由两个部分组成:我们把它们叫做API声明和脚本实现。API声明由以下部分组成:
a. PUBLIC:COMPONENT
这一部分组成了HTC的最外围元素。仅仅定义了所包容的内容是一个组件
b. PUBLIC:ATTACH
本部分定义了对于客户事件的处理
c. PUBLIC:PROPERTY
公开的属性定义
d. PUBLIC:EVENT
公开的事件定义
e. PUBLIC:METHOD
公开的方法定义

由于本文仅仅是一个tutorial, 仅分析使用到的语法, 更多规范可以参考MSDN文档:
ms-help://MS.MSDNQTR.2004JAN.1033/Behavior/workshop/components/htc/reference/htcref.htm
(地址可能需要修改)
或者联机版本:
http://msdn.microsoft.com/workshop/components/htc/reference/htcref.asp?frame=true
(以下规范基于IE5.0及以上版本)
 
PUBLIC:ATTACH
表示绑定事件与处理过程
EVENT: 表示事件句柄名
ONEVENT: 表示处理过程名
PUBLIC:PROPERTY
表示公开到环境的属性
NAME: 属性名
属性可设置类似C# property的读写器, 分别是get和put过程. 设置属性之后, 可使用HTML语法指定组件的属性值为任意值。

PUBLIC:METHOD
公开到环境的方法
NAME: 方法名
PUBLIC:EVENT
可由环境catch的事件
NAME: 事件名
ID: 内部引用名称
脚本实现

API声明仅定义了组件公开到环境的编程接口, 在组件中需要使用脚本来实现内部逻辑. 脚本实现主要有以下部分:
1. 定义事件处理过程
2. 定义PROPERTY的取设过程
3. 定义METHOD的具体实现
4. 定义EVENT的引发逻辑
5. 其他内部过程

其中EVENT的引发一般在其他过程中进行. 而脚本的语法与普通HTML页上的脚本没有什么不同.

7.实例讲解
以上的Button Style Flat虽然很短小, 但可以基本说明本文的中心内容, 即HTC编程思想. 我们接着看上面提供的实例:

a. 在第一行我们注意到, 改实例将ondocumentready事件交给了一个OnInit()的脚本过程处理(ATTACH语法). Ondocumentready是component特有的事件. 表示当表示component的前端HTML完全载入的时刻.可以说ondocumentready事件是components初始化时的过程. 在我写的所有HTC中, 都ATTACH了这个事件. 这一习惯不知道从什么时候开始的. 慢慢我发现不能离开ondocumentready了. 只要我们的HTC中需要一个类似初始化的过程, 我们就需要指定ondocumentready时刻发生的过程. 在本实例中, 我们在ondocumentready所绑定的过程中初始化了button的最初样式. 即根据schema特性决定button的外观.

b. 定义一组鼠标事件. 一般而言, 我们的component都是可见的. 而HTML页中与用户交互的主要动作是鼠标的
动作. 所以, 通常情况下, 我们总是会deal鼠标的五个基本事件mouse over, mouseout, mouse down, mouse up 和click. 同样是一个习惯, 我通常不加考虑的ATTACH 这五个事件. 即使绑定的过程是空的.

c. PROPERTY, 可以定义get和put过程做属性的取设器. 一般情况下都可以省略这两个过程. 除非要对设置的值进行合法性校验.

d. EVENT的引发. PUBLIC:EVENT声明的ID attribute用于script部分的内部引用. 当需要引发该事件时, 仅需要使用类似: push.fire()命令就可以. 环境就是开始准备catch该事件. 相当简单.

e. METHOD实现. METHOD的name attribute直接代表<script>部分的函数名. 因此可以直接声明一个同名的function. 可以有返回值, 也可以没有返回值. 在本实例中我们仅仅发出了一个客户端消息.
注意, 实例中的push事件和showMessage()方法都是没有什么实际意义的. 放在实例中仅仅为了说明编程方法.

8.总结
到这里为止, 我们可以总结一下简单模式下, 我们可以做的工作: 如何创建一个有效的HTC组件
a. ATTACH ondocumentready事件, 在过程中实现初始化时的步骤.
b. 分别ATTACH鼠标的五个基本事件. 如果该组件设计了键盘事件, 也进行同样的绑定过程.
c. 如果组件设计了特定的客户端事件, 仅需要定义并且在需要的时候引发.
d. 特定的METHOD语法也很简单. 仅需要声明一个METHOD, 并且在SCRTIPT部分实现同名函数即可.
e.考虑更复杂和实用的应用

button实在是太简单和太不值得一提了. 我们来考虑一个很受欢迎的东西: treeview. 一个所有web开发人员都非常热爱的东西.

我们知道, 现在实现treeview的方法很多. 多美观, 多实用的都有. 我们给自己提出需求, 来看一看用HTC如何设计一个好用而且节省成本的treeview.

需求
可以使用客户端数据填充其内容; 外观与windows 资源管理器一致; 可以catch到expand/collipse事件; 可以catch到节点的click事件; 可以定义节点展开/收缩的模式(记忆模式); 可以由接受环境指令expand/collipse指定的节点.

分析
如果以上需求都可以实现, 那么将是一个非常"高级"的treeview了. 我们逐一分析上述需求:

1. 使用客户端数据填充: 既然是treeview, 则必然由节点构成. 既然是节点, 就必然体现一定的数据. 而数据的由来一般情况下是由后端传送来的. 这就要求我们最好使用一种数据格式. 不需要更改, 在后端和前端都可读. 一般朋友都会想到用XML. 这是很好的想法. 这样, 我们的treeview必须能够按照一定的规则读取XML数据. 将节点解析出来, 并且使用一定的输出方法输出目标HTML形成带有图标, 文本, 节点线的外观. 这样过程一般在OnInit()过程中进行.

2. expand/collipse事件. 有时候环境需要了解treeview的状态. 例如展开某个节点是自动显示某些内容. 因此环境必须随时了解treeview里发生了什么. 这样需要我们分别定义expand/collispse事件. 在某些情况下自动地引发他们.

3. 节点的click事件很重要. 一般情况下, 用户单击某节点是总是会期望得到什么.

4. 设定展开/收缩的模式. 我们可以指定treeview是否自己记住展开的节点的状态. 而有些情况下我们希望treeview不会太长而希望不准同时展开两个节点. 这需要我们定义一个PROPERTY. 可以通过HTML attribute或者script设定该值从而影响compenent的behavior.

5. 接受环境指定改变节点状态. 如果我们希望不经过用户操作而自动打开某节点(不经过页发回), 希望通过环境的script命令操作treeview. 我们可以定义一些列METHOD, 例如expandNode(id): 展开指定id值的节点.
这样, 我们就开发了一个有着高级特性的treeview component. 而且该组件的重用性是很高的. 我们只需要在HTML中插入一个特定的标记, 类似<Timeline:Treeview ><xml data…. /></Timeline:Treeview>. 你的 HTML页就会出现一个非常漂亮的树型目录了.

结束
本文论述了开发HTC的一般性方法. 作者希望可以通过本文, 使广大web工作者认识到HTC的优势. 以期待可以抛砖引玉, 得到遍地开花的美好结果.


作者发现经常有朋友转载文章而不说明出处. 作者欢迎转载, 但同时希望得到应有的尊重.
本文最初发于博客园( http://www.cnblogs.com)之春鱼文集(Jay's Blog)( http://www.cnblogs.com/jayxu).

结束编辑于 2004-8-5. 将进行不定期修改.

修改历史:

posted on 2004-08-05 00:22 春鱼 阅读(8022) 评论(39)  编辑 收藏 所属分类: 脚本技术(DHTML)

评论

 

我们在曾使用了大量的HTC。HTC有很好的思想,但由于其基于IE,不稳定。代码复杂之后,会出现很多莫名其妙的BUG。

例如,MS IE WebControls中的TreeView,如果每个节点都带一个小图标,节点有上百个或者数百个,此时,就有可能出现莫名其妙的问题。我们为此事询问Microsoft,得到的答复是,HTC中的图片太多,导致过多图片请求,需要修改IE在注册表中的配置解决。Microsoft并且认为不是BUG,而认为只是一个需求缺陷。

我们的经验是,不建议基于Web开发过于复杂的UI界面。因为IE这个开发环境不够可靠,而且微软也不打算改进它。   
回复  引用  查看    

#2楼  2004-08-05 08:55 春鱼

我前面讲过. HTC仅仅是一种封装机制. 并不是新技术. 所以不会出现IE运行不稳定的状况. 如果出现了不稳定, 大部分原因我想应该是代码不够健壮所致.

MS IE WebControls本来就是一套样本类型的组件. Microsoft在MSDN中已经申明目前并没有任何技术支持可用. 并且其源代码是开放的. 自然可以找到问题所在.

脚本环境与IE的版本有很大关系. web是可以承受复杂的UI的. 如果你发现IE的脚本环境不够可靠, 那应该不是IE的问题. Microsoft在这一方面做的工作比任何 其他浏览器都多.    回复  引用  查看    

#3楼  2004-08-05 10:09 宝玉

如果xml+xsl+htc结合,可以做出很棒的真正换皮肤换风格的控件。目前正实验阶段。   回复  引用  查看    

#4楼  2004-08-05 10:13 spidertan

很好,我也一直在用htc作bs程序(bug跟踪),我主要还是用在处理数据、与数据库打交道上,希望交流   回复  引用  查看    

#5楼  2004-08-05 11:20 杨若

HTC基于脚本语言完成的针对文档对象模型和Web表现层的可重用对象结合IE内置的MSXML帮助我完成了很多在ASP中显得很高难度的动作。不过自从ASP.NET逐渐强大以及带宽逐渐不再是主要问题以后,HTC的价值没有以前那么大了。同时微软对HTC的支持好像也不如以前了。所以我对HTC的前景并不十分看好。   回复  引用  查看    

#6楼  2004-08-05 11:37 春鱼

HTC的技术很简单. 没有什么支持不支持的分别. 也没有"前景"的概念. 并且HTC仅仅是客户端的技术. 和ASP/ASP.NET, 带宽等等都没有任何牵强的联系.

另外, HTC并不能直接处理数据, 和数据库打交道.

HTC的基础DHTML. 而按照我的理解, DHTML包含HTML, Scripting技术和IE DOM对象. 他们都是基于IE的客户端技术.   回复  引用  查看    

#7楼  2004-08-05 11:50 myrat

htc在现在是个好东西,但是我也不看好它的未来,起码ms没有怎么宣传它,支持它   回复  引用  查看    

#8楼  2004-08-05 11:57 myrat

才看到春鱼的评论,我觉得它没有什么前景的意思是
1。它不太可能被改进了,
2。它不会成为主流,只会慢慢被淘汰   回复  引用  查看    

#9楼  2004-08-05 12:20 宝玉

HTC对于控件的封装很多地方比纯js有优势,例如它可以有自己的属性、方法、事件,在asp.net中的web控件的客户端脚本,htc是首选(IE浏览器)   回复  引用  查看    

#10楼  2004-08-05 13:51 Xpc

不管Asp或Asp.net多么"强大",它终究是一种服务器端技术。Asp.net的出现并没有给IE客户端带来更多的东西。而对于客户端技术,MS没有改进它也许是在现有体系下无法更动了。

但是不可否认,过多的客户端技术对程序的兼容性及稳定性会有很大的影响(除了Bug之外),要寻求强大的客户端功能也违背了B/S架构的初衷。   回复  引用  查看    

#11楼  2004-08-05 14:47 春鱼

B/S结构不是生来的"瘦". 如果可以变得灵活和强大, 为什么一定要坚持贫穷的立场?

HTC的确会带来兼容性的问题. 但任何事情也不是绝对的. HTC不是一场革命, 不是包治百病的万能药. 这不是大是大非的问题. 而是一个度的问题.

正因为脚本语言简单易用, 才会出现所谓"不稳定性".   回复  引用  查看    

#12楼  2004-08-05 23:17 温少

@春鱼
我想你缺乏使用HTC开发过复杂的界面程序的经验。(如果说错了,或者不恰当,请别介意)。

我曾经在大约2001年时,编写过Web应用程序,基于ASP .NET,使用了HTC。最初是Kingdee的HR系统,后来是EAS .NET。

在EAS .NET中,大量采用了HTC,包括菜单、报表、打印。其中复杂的报表HTC组件,大约7万行,功能强大,支持虚模式、分组、公式等,可是说十分的强大,要比曾经轰动一时的方城Web报表还要强。KINGDEE EAS .NET是我见过最强大和花哨的Web应用。
(澄清一下,在EAS .NET中,这些使用了HTC的WebControl,我没参与开发。那时候我专注于开发工作流。)

EAS .NET的WebControl,界面非常漂亮,都是支持更换Skin的,我们的人机工程部,为这些控件设计了不同的Skin,修改了Skin之后,就如同Winamp中更换Skin、Windows更换桌面主题一样,完全不同的色调风格。

强大花哨的界面,一个后果就是复杂。这些WebControl中,使用了大量的小图片,HTC组件中动态构建的界面中,装载图片的方式和普通的Web是不同的。我们的程序出现了一种症状:当我们操作界面时,IE会偶然锁定,锁定后,你在IE上作任何操作都是无效的,包括关闭窗口的操作,你只能从TaskManager中把它杀掉。这种死锁不是每次都发生,他是偶然发生的。

也许你会认为我们不熟悉HTC,或者程序没写好,但我不是这样认为的。Microsoft提供的IE WebControl同样存在我所说的上述问题,其中Tab Control和TreeView都是不稳定的,特别是Tab Control。

在开发HTC的过程中,遇到问题时,我们是有咨询过微软,具体的结果我在前面的评论中已经说过,就不再重复。

我们在Microsoft技术支持人员得到的信息是,IE开发组的人员,每年都在减少。其实就是暗示着我们,不要太依赖IE。

再重复一下我的观点:
不建议基于Web开发过于复杂的UI界面,因为IE这个开发环境不够可靠,而且微软也不打算改进它。   回复  引用  查看    

#13楼  2004-08-06 00:49 春鱼

任何技术都有可为, 有所不为. 我已经一再强调HTC仅仅是脚本的封装, 没有任何新鲜的东西, 也并没有声称HTC改变了客户端UI开发的局面. 本文的目的仅仅在于总结或者推荐一下HTC的技术特点. 仅仅是入门的材料而已. 从头到位都没有流露出HTC强大之类的情绪.也不推荐使用HTC开发"过于复杂的UI".

至于所谓IE的开发环境. 并非我执迷不悟. 乃是我实在想象不出来有什么地方"不可靠". 实际上IE6.0以上已经非常成熟. 我们能做的, 仅仅是在脚本可以正常运行的前提下开发我们的需求. 所谓适可而止, 如果你的应用超出了IE的能力, 那么你的小组应该考虑换用其他解决方案了.

这样辩论实在没意思. 就算有意思, 也没必要批判IE, 我们只有一个IE, 不管是好是坏, 我们都没有其他选择. 更没必要提到Microsoft. Microsoft不止是一个IE, Microsoft想的事情很多. 我们和Microsoft之间, 其实谈不上什么关系.   回复  引用  查看    

#14楼  2004-08-06 03:01 温少

@春鱼
可能产生误会了:)

其实我想说,如果要作复杂的Client端UI,还是选择Windows Form之类的Rich Client。

我,还有一些曾编写过大量HTC的朋友,吃过亏之后,都觉得IE不是一个好的开发平台。这段时间网上出现很多复杂的基于HTC的Web UI界面,其实博客园的编辑器也算是一个。IE并不差,这种复杂度还是可以承受的,但是更进一步呢?可能就不行了。

因此,对于企业来说,把原来基于Windows应用程序的客户端,全部迁移到Web上来,最终会发现一些问题,而且很难解决。这可是我们亲身经历,我们痛过,所以感觉深刻,也希望告诫后来者,作为前车之鉴。   回复  引用  查看    

#15楼  2004-08-06 09:28 春鱼

如果blog早几年流行起来, 也许本文三年前就应该写成了. 我只是想把自己的经验, 见解记录下来, 并没有非和谁一争高下.

技术没有绝对的是非曲直, 技术本身没有任何值得炫耀的地方, 对于做应用的开发人员来说.

HTC本来就是可有可无的东西. 其影响力还达不到对解决方案的选择. 再者, HTC也并不能代表"瘦客户端UI". 仅仅是一种替代的选择. 没有必要我们因为知道HTC, 就一定要用HTC.

上升到胖瘦的选择问题, 如果不是单纯为了取悦用户, 或者炫耀技术之外, 根本没有必要, 也不可能把Windows的UI完全模拟出来, 这是开发成本的问题, 是效率的问题, 是风险的问题. 事实上, 使用基本的 HTML form element 已经可以满足需要. 也是最朴素的解决方法. 没有一种解决方案是万能的. 仅仅是优势的权衡.   回复  引用  查看    

#16楼  2004-08-06 17:52 杨若

@春鱼
你误会了我对HTC的理解程度。
一:我们使用复杂的客户端技术处理一些逻辑,一定程度上就是为了降低网络访问频率。当带宽不是问题的时候,复杂逻辑由服务端处理其实从整体上来看是比较合理的(安全性,可扩展性等)。因为毕竟IE的Script runtime能力很有限。
二:ASP和ASP.NET在我看来主要区别中的一点就是:
      ASP基于HTTP的扩展与封装做的很弱,他存在的价值就是COM的黏合剂。在MS平台下使用ASP+COM/COM+完成灵活、交互复杂的系统还是很吃力的事情,当你的客户端请求不想只局限于FORM的get,post的时候,借助HTC+Microsoft.XMLDOM/XMLHTTP就可以实现一些相对传统ASP技术实现起来比较困难的功能,比如Http异步请求,页面的局部刷新等等。所以HTC+Microsoft.XMLDOM/XMLHTTP对我来说的确在很大程度上弥补了ASP的不足。
     ASP.NET将http过程做了很不错的封装,ViewState帮助我们完成信息从服务端到客户端的交互(不过也有若干缺陷),我们几乎不需要在客户端考虑Post的问题了。所以当ASP.NET使Client和Server之间的界限变得不是那么硬的时候。Client的处理能力仿佛加强了。
     所以随着ASP.NET出现,我没有再像以前那样把基于IE浏览器的客户端技术看得过重。

HTC标准由微软提出,运行在IE特定环境之下,微软的支持与否对HTC的健康发展至关重要。你能说msdn不是你了解学习htc的地方吗?

我的看法和温少比较接近。HTC是一个不错的基于IE的组建模型技术,思想也很不错。但是如果尝试使用HTC去构建基于IE的Rich Client体系的话,存在着一定的风险。HTC做一些相对轻型的可重用组件还是不错的。所以我们讨论的只是HTC定位的问题,而非此种技术的好坏。
另:我从来没有使用HTC访问数据库,也从来没有在IE端直接访问数据库的经验和经历。我只是利用HTC封装的组件处理Microsoft.XMLDOM从服务端Load的XmlStream,利用数据绑定做显示,再通过Microsfot.XMLHTTP提交到服务端来完成最常见的数据CIUD工作。

我感觉随着微软下一代操作系统Longhorn对Internet支持的逐渐强大,Avalon做为新一代界面框架将成使资源展现,搜索时所处的位置是本机还是网络有所弱化。我没见过Longhorn是什么样子,但我感觉到时候我们访问internel上的资源,不管html,图像,媒体。可以通过更多途径。IE+DHtml的展现方式不会被取代,但更强大的Xaml将成为Microsoft的主要方向。微软对DHTML整个体系的支持都在减弱。   回复  引用  查看    

#17楼 [TrackBack] 2004-08-08 09:52 t_jian

Ping Back来自:t_jian的专栏
[引用提示]t_jian引用了该文章, 地址: http://blog.csdn.net/t_jian/archive/2004/08/08/68373.aspx   回复  引用  查看    

#18楼  2004-08-19 17:37 兀儿-干部

同意 温少 的:不建议基于Web开发过于复杂的UI界面!我也曾使用HTC技术开发过一套投票系统,但是在数据条目过万的情况下,在客户的反映速度也慢了,而且也经常出现莫名其妙的错误!


不过,即使是这样,我做东西时还是喜欢用HTC封装!   回复  引用  查看    

#19楼  2004-08-20 22:38 偶然

偶然在搜索資料的時候看到這篇文章
這里的人——很強
我只是綱管,不懂js,了解一些C++

今天安裝 ISA 2004 Standard 後
遇到控制台問題ox80070057
Parameters Incorrect.
控制台樹無法展開和進一步配置

我對它的界面結構不了解
起初懷疑Java支持問題
加裝了JRE,老樣子
後來大致看了一下,頁面涉及到一個HTC文檔
才上網查查

我的IE6sp1應是沒問題的
不知是不是使用了HTC的結構有兼容性問題
還有,對ox80070057的搜索結果寥寥,幾乎沒有匹配的
一般在支持比較少的技術上才會這樣,可能是HTC的問題

不懂的是,即然MS不推荐,為何要在新產品上弄個這樣的
讓人剛安裝就卡殼
不知是否代表對HTC技術有進一步的意向


  回复  引用  查看    

#20楼  2004-08-22 12:25 aotianlong

不错,正是我需要的内容!谢谢!

顺便说一下,
物尽其用 
比如我们用PS设计图片,DW设计网页,VC设计程序,你非要叫VC设计图片,DW设计程序,PS设计网页。怎么行?

语言也一样,该是它干的就让它干,它干不了的千万不要叫它干!

  回复  引用  查看    

#21楼  2004-12-04 19:52 Benny Ng (MiaoMiaoGa)

HTC..开发CRM时把我给搞惨了...很多情况下都会出错了...而且是时出时不出..在全文没读完整的情况下也会出错..:(~...以上都厉害...分析得那么深...我只知道不好我就把它废掉了...   回复  引用  查看    

#22楼  2005-02-21 23:51 lint

在全文没读完整的情况下也会出错..:(~...


你没有判断读完否?
函数执行前需要判断一下element.readState

比如
function loadData()
{
var docLen = parseInt(window.document.all.length)
if (!documentComplete)
for (var i=0;i<docLen;i++)
{
if ( window.document.all[i].readyState != 'complete')
{
if ((new Date() - startTime) < 500)
{
setTimeout('window.document.all.' + element.id + '.loadData()',10)
return
}
}
}
documentComplete = true
...
}   回复  引用  查看    

#23楼  2005-04-27 17:44 dujid

同感,楼上的弟兄们都很强。
确实,之所以选择B/S结构,就是想要减少对客户端的依赖,扩展性也更强。
IE平台的确不十分稳定,因为这主要取决于客户机,我们的服务器是经过专业人员维护的,客户的操作系统的稳定性无法跟我们的服务器相比。在中国,现在依然还有人在使用 Windows 98,绝大部分的机器内存容量在 256M 左右,客户的操作能力也各有高低,这些都直接影响着我们的东西能否运行的良好。
面对层次不同的客户,我们对于提供给他们的接口,应该尽可能的选择耦合度最小的,依赖程度最低的元素。
就像现在的ATM,提供给客户的只有一个触摸式显示屏。
  回复  引用  查看    

#24楼  2005-06-27 09:51 风筝

HTC说白了是一种封装技术~不是什么其它技术的另类选择~楼主只是想大家了解一种可重用的技术~不过说实在的~微软已经渐渐放弃甚至屏蔽了对HTC的支持。等你们的客户不断向你投诉的时候~你就很想狠狠地骂微软了~   回复  引用  查看    

#25楼  2005-08-10 18:40 蛙蛙池塘

有时候真舍不得脚本和DHTML   回复  引用  查看    

#26楼  2005-11-08 22:48 Unknown [未注册用户]

用纯JS模拟方法,实践完全可以,for example:
void function XClass()
{
this.objXML = null; // Property
this.GetXML = XClass_GetXML; // Method for get
this.SetXML = XClass_SetXML; // set
this.OnCreate = null; // Event, Pointer for XClass
// For user's define.
this.OnChange = null;
this.Create = XClass_Create; // Constructor for XClass
}
function XClass_GetXML()
{
return ( this.objXML );
}
function XClass_SetXML( objXMLDoc )
{
this.objXML = objXMLDoc;
this.OnChange(); // Fire OnChange event if the function is executed. if the pointer to OnChange is set to null, it will do nothing.
}
function XClass_Create()
{
this.OnCreate(); // Fire event when constructing
// If the pointer to event is set to null
// it will do nothing.
// Do something you want;
// Databinding for html instance
objHTML.objXML = this.objXML;
objHTML.GetXML = this.GetXML;
objHTML.SetXML = this.SetXML;
objHTML.OnChange = this.OnChange;
//
return ( /* html instance */ );
}
// Construct an instance of class
var objXClass = new XClass();
objXClass.objXML = objXMLDoc; // Code omitted, won't fire the OnChange event.
objXClass.SetXML( objXMLDoc ) // OnChange event will be fired.
objXClass.GetXML(); // it will return the value iof previous
line
objXClass = objXClass.Create(); // Get html instance after databinding, and OnCreate event firing.
// you can do what it has been done, except Create() method, because of which didn't bind to the html instance,   回复  引用  查看    

#27楼  2005-11-08 22:53 Unknown [未注册用户]

不要期待服务端能做很多事,因为这不符合逻辑,人云亦云,你什么都干不成功.   回复  引用  查看    

#28楼  2005-11-08 23:09 Unknown [未注册用户]

To discuss the first posting contact me:QQ:517527634
Who please notes what you want to discuss with me with your posting which makes a frend with me.
thanks a lot.
I am 6qing88   回复  引用  查看    

#29楼  2005-12-27 09:30 浩洋 [未注册用户]

是的。春鱼只是想大家了解一种可重用的技术,并不是一味的推崇。春鱼支持你,希望能频频发表一些新技术。。。。。。。。。。   回复  引用  查看    

#30楼  2006-04-17 15:36 canoe.du [未注册用户]

偶发现在HTC中使用setTimeout("functionName()",100)这类系统函数,如果functionName()是定义在HTC中,会报对象不存在?? functionName()定义在调用htc的页面中. 真TMD垃圾;   回复  引用  查看    

#31楼  2006-04-17 15:56 canoe.du [未注册用户]

接上:在使用setTimeout("functionName()",100)这类函数时,必须写成setTimeout(functionName,100),也就是说,只能通过句柄来访问. TMD!!   回复  引用  查看    

#32楼  2006-05-14 17:39 microsystem [未注册用户]

小弟也是最近在看HTC方面的资料,写了一段大家看看
http://www.microsystem.cn/data/htc/datacheck.htm   回复  引用  查看    

#33楼  2006-05-18 17:11 microsystem [未注册用户]

如何使2个htc对同一个对象同时起作用?
声明没有同名事件   回复  引用  查看    

#34楼  2006-07-26 17:02 piggybank [未注册用户]

呵呵,HTC 好像并不与 ASP.NET 冲突吧。
如果我们封装一个 ASP.NET Web Control,我一定会把输出的大量 HTML 和 JS 封装到 HTC 里。
毕竟,ASP.NET 在服务器端生成的(Render)还是 HTML,还是要到客户端去执行——这恰恰是 HTC 的舞台。

至于 HTC 是否适于 RIA,那倒未必。诚然,HTC 效率上未必很好,可有多少应用是真正很 Rich 的?
再说,楼上各位用 HTC 多的朋友,想必都是用来做企业 MIS 吧,所以才那么不在乎带宽,那么耍弄花巧。

如果说往一个 DataGrid HTC 中加载大量的数据会导致这样那样的问题,那为何不动态加载呢?
AJAX 出来前好多年,就可以通过 IFrame 甚至 Frame 实现“异步加载”,何况2000年后可以用XMLHTTP,IE5以后可以用 IE:Download...
这些都不是技术本身的问题:好比有朋友说的,你总不会拿 VC 来做平面设计吧。

只是 RIA 方面,我更看好 Flash,只可惜那些学 Flash 的哥们过于在意“故事情节”而懂一些AS的人中,目前能够有很好的编码技巧的又很少。
2003年,曾经封装过一套基于 Flash 的客户端 Chart 组件,配合 ASP/ASP.NET/JSP 等等动态网页技术,这其实是一条很好的 RIA 路线,可惜后来那几个哥们都去拼“全国十大金闪”去了——有两个杀入十强,却又怎么样呢?只是美工强一些罢了,遗憾遗憾

无论 HTC 的明天如何,但 HTC 这样的 Object Based 的应用方式对于解决B/S应用中客户端方面的代码的维护问题有很大的好处,我喜欢。

至于有朋友说到IE“假死”或者HTC没载入完全就报错的问题,我想是编程的品质还有待提高——例如对 HTC/CSS 的基础知识掌握得还不够扎实。

2000年我们就在WebChat中通过HTC设计了在一个IE窗口中用Tab登入多个聊天室聊天的系统(采用Applet和服务器交换数据,采用刷新式命中率太低,服务器负载浪费太大),万人在线对于服务器也没多大影响,而对于客户端而言也没见的有多慢(当然不能同时进入太多聊天频道)。   回复  引用  查看    

#35楼  2007-01-26 13:44 shcity [未注册用户]

我喜欢htc,那些不想用的,可能你们用得太多了,技术已经很强了.....   回复  引用  查看    

#36楼  2007-02-28 11:18 sss [未注册用户]

htc欲哭无泪,欲罢不能呀   回复  引用  查看    

#37楼  2007-03-13 16:11 加油站 [未注册用户]

支持支持!   回复  引用  查看    

#38楼  2007-08-22 15:03 在线翻译公司 [未注册用户]

推荐一个免费的多语种在线翻译网站 http://www.165net.com ,可进行十多种语言的互译   回复  引用  查看    

#39楼  2008-02-29 20:34 李勇kaven276 [未注册用户]

HTC 使用中的很多问题其实是对 dhtml/dom/js/css 等基本技术掌握不扎实造成的,但是 HTC 技术本身确实也有问题,比如:
1、当一个页面中有太多元素挂接htc时,后面的元素有时会挂不上htc
2、一个页面会对同一个htc产生不止一次的http get 请求,具体重复次数没有规律
3、htc 的加载在 ie6 和主文档解析是并行的,在ie7 下,是串行的并且在主文档分析完之后才执行其中的代码   回复  引用  查看    

  #1楼  2004-08-05 02:29 温少
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值