Kevin Cheng's Yard
电脑是我的老婆,编程是我的灵魂,代码是我的语言,按键是我在歌唱。
随笔- 54  文章- 0  评论- 247 
博客园  首页  新随笔  联系  管理  订阅 订阅
2010年12月1日
基于 aspnet 的自动合并输出js和css的解决方案

这是一个基于 aspnet 的自动合并输出js和css的解决方案。


首先感谢 LoveCherry 的文章《httpmodule和httphandler配合的又一应用——合并脚本样式》(http://www.cnblogs.com/lovecherry/archive/2010/04/01/1701997.html),我是在这篇文章的基础上进行修改的,令这个模块更为实用,我做了以下修改:
    ·简化tag的写法,统一用 <link runat="server" type="..." src="..."/>来表示资源
    ·修正js和css生成顺序问题,原代码中资源合并由于是异步的,其生成顺序是不一定的,是会出错的
    ·增加group属性,资源不一股脑的直接输出,避免字符集不一致和超大文件的产生问题
    ·增加merge属性,可控制单个资源是否需要合并输出
    ·增加压缩选项,可压缩后输出css和js文本
    ·一些类名项目名的调整和简化

具体代码就不说明了,大家下载去看便是。以下是使用说明:

------------------------------------------------------------
使用说明
------------------------------------------------------------
(1)引用数据集
    ResourceMerge.dll
    如果需要启用压缩的话,还需要引用:
    Yahoo.Yui.Compressor.dll
    EcmaScript.NET.modified.dll
   
(2)修改 web.config

    <appSettings>
      
<add key="ResourceMergeCompress" value="true" />
    
</appSettings>
    
<system.web>
      
<httpModules>
        
<add name="ResourceMergeModule" type="ResourceMerge.ResourceMergeModule, ResourceMerge"/>
      
</httpModules>
      
<httpHandlers>
        
<add path="ResourceMergeHandler.ashx" type="ResourceMerge.ResourceMergeHandler, ResourceMerge" verb="GET,HEAD"/>
      
</httpHandlers>
    
</system.web>

 

(3)使用link标签引用资源
    css资源
        <link runat="server" type="text/css" src='content/app.css' />
        原有的<link>标签统统不用改变了,只需要加上runat="server"属性。
        事实上,若该link标签在<head runat="server">内部的话,runat="server"也可不用加了。
    js 资源
        <link runat="server" type="text/javascript" href="content/jquery-1.4.2.min.js" />
        也使用<link>标签,唯一的区别在于 type="text/javascript"
        此外,可以用 href 或 src 表示资源来源
    附加属性
        group  : 同组的js或者css是合并输出的,以避免字符集不一致或超大文件产生的问题
        merge: true 或 false,表示是否将该资源合并输出

 

------------------------------------------------------------
示例
------------------------------------------------------------
masterpage, page, ascx 中用以下标签

    <link runat="server" type="text/css" group="basic" src="content/grid.css" />
    
<link runat="server" type="text/css" group="basic" src='content/define.css' />
    
<link runat="server" type="text/css" src='content/app.css' />
    
<link runat="server" type="text/javascript" group="jquery" src="content/jquery-1.4.2.min.js" />
    
<link runat="server" type="text/javascript" group="jquery" src="content/jquery.media.js"/>
    
<link runat="server" type="text/javascript" group="jquery" src="content/jquery.metadata.js" />
    
<link runat="server" type="text/javascript" group="jquery" src="content/jquery.bgiframe.js" />
    
<link runat="server" type="text/javascript" src="content/json2.js" />
    
<link runat="server" type="text/javascript" src="content/swfobject.js' />
    ...

 

以上的标签可能会生成以下代码,将资源合并输出,有效的减少了请求数目:

   <link href="/ResourceMergeHandler.ashx?type=css&amp;key=A176D36015E217C4503FA63B2176B078" rel="stylesheet" type="text/css"/>
   
<link href="/ResourceMergeHandler.ashx?type=css&amp;key=925F680A7156EF593595248981518ADB" rel="stylesheet" type="text/css"/>
   
<script src="/ResourceMergeHandler.ashx?type=js&amp;key=CC2081A83FC0CD8F0B6D6E26F81019FA" type="text/javascript"></script>
   
<script src="/ResourceMergeHandler.ashx?type=js&amp;key=A6DFEB50FB9BE04E83AB2D17A1709F16" type="text/javascript"></script>

 

   
------------------------------------------------------------
备注
------------------------------------------------------------
说明
    ·同组的js或者css是合并输出的,以上代码js分两组(jquery, default),css分两组(basic, default)
    ·同组内的字符编码自己负责,不一致的话生成的js代码可能会出错
    ·生成的顺序和标签的顺序是一致的
    ·可压缩输出合并的资源

 

关于标签的选择
    前一个版本是统一使用<src> 标签来描述资源的,发现在实际使用中改动过大。
    故改变思路,看能否在最小改动的前提下自动实现资源合并输出的功能。
    (1)css很容易,直接用<link>标签,完全不需变动。在module代码中可以用 HtmlGenericControl获取。
    (2)js则有点麻烦
        若加上runat="server"属性,则aspnet会认为这是服务器端脚本,页面输出直接截止了。
        若不加runat属性,aspnet会将该标签和其它文本一起解析为LiteralControl,很难拆分出来。
        故没法保留原有的script标签,最简单的考虑就是改为link标签,这样改动的代码量小些。

 

另外一个问题,css文件中若使用了相对图像路径,合并css的话会导致无法找到图片的问题。暂时有以下几个解决方案:
    (1)css文件中改为使用绝对图像路径。
    (2)使用 merge="false" 属性,跳过该css资源不做合并处理

 

 

 

posted @ 2010-12-01 18:00 Kevin Cheng 阅读(428) 评论(3) 编辑
2010年11月6日
从QQ360事件引出,对促进国内信息产业良好发展的一些法律方面的想法(草案)

首先说明,该文是脑子里一些不成文的想法,文章也未完善,先供网友讨论。

 

最近国内互联网上闹哄哄的,大部分的国内网民都受到波及。撇开事件双方不提,从法律方面考虑,脑子里有一些隐隐约约的想法,中国互联网需要一个相对公平开放的环境,需要从以下几方面着手:

1. 加强反垄断法的实施,塑造公平竞争的环境

(1)禁止事实用户垄断企业进行附加软件捆绑。以微软windows ie为例。
(2)禁止所谓的行业联盟协议。以欧美国家禁止同行制定行业定价为例。
(3)尊重用户选择权。以windows浏览器选择器为例。
(4)尊重用户隐私权。以MSN和qq在后台操作的文件比较为例。
(5)开放IM通信协议。以MSN, ICQ, GTalk为例。
(6)对违法者严厉的司法惩罚。以微软、apple、facebook为例,以人人网纠纷为反例。
以上准则在欧美国家都是事实通用的,违反就会给告死,赔偿一笔不菲的金额,这些都有先例(举例说明)

 

2. 削弱知识产权的保护力度和权益

该点针对知识产权保护的现状来提出的,知识产权保护的初衷是保护开发者的权益,目标是促进科学技术的繁荣发展。而现阶段,这个保护反而起到了部分反作用。以下分几个方面可以证实:(1)保护时限过长,足以让版权人打官司舒舒服服过一辈子,也抑制了优秀的技术的大规模推广。此外针对IT行业,由于其具有周期短的性质,冗长的保护时间更不利于优秀技术的推广(2)此外,保护范围审批过松。前阵子获悉apple公司获得用两只手指放缩图片的操作的专利,这无疑是对触摸屏操作开发的一个极大的打击,换句话说,用手指拉伸旋转物体本来就是人自小学会的能力,现在只是移到电脑操作上而已,这种操作也能当作专利来审批,那么人的直立行走、说话、吃饭等这些生理行为都可以挪移到电脑上进行审批了,这是一个谬论,也是一个很悲哀的情况。故,针对当前的知识产权保护现状,我提出以下几点想法:

(1)维护知识产权所有人的权益,对违法者给予司法严惩。这是前提...也是胡萝卜。以下均是大棒。
(2)缩减知识产权保护的年限。查阅相关法律文献引证。个人建议:文学作品的保护年限应该不超过50年,而IT行业的专利更是不应该超过15年。
(3)慎重审核知识产品的审批,对于事实工业应用的技术不应授予保护。以apple的拇指放缩图片专利为例,以汽车雨刷的专利为例。

 

总结.....“二流的司法造就二流的企业”,在中国正是如此,这正是吾辈应该努力去改善的地方。

posted @ 2010-11-06 11:34 Kevin Cheng 阅读(99) 评论(0) 编辑
2010年10月27日
学习 Silverlight 4 很受伤

silverlight 4 出来有段时间了,各网站上对它均是溢美之词,想想看,这技术也应该成熟了,心动了,就拿它练练手吧。据我原先所想,sl使用xaml做为界面语言,可使用C#开发,可使用.NET类库,开发起来应该和winform差不多吧,最多是不允许使用interop和com这些桌面相关的操作吧。在深入了解了一些资料并调试了一些程序后(网上下载的很多示例都跑不起来,可能是我火候未到吧),我发现,我错了....
事实不是我想象的那样的,感觉,silverlight4 的水很深,学习曲线很陡很陡,很受伤....
以下是现阶段我的分析,不排除有对silverlight 4 误解的地方,欢迎指正解惑(以下将用sl 4做为 silverlight 4的简写)。

1. SL 4 可使用的类库

首先,sl 4可使用的类库大大阉割了,此外也新增了很多它专有的陌生的类库。
以下是sl 4可用的数据集(我承认,是我手贱手打的,目的是加深印象):

 1     Microsoft.CSharp
 2     Microsoft.VisualBasic
 3     mscorlib
 4     System
 5     System.Core
 6     System.Json
 7     System.Net
 8     System.Numerics
 9     System.Data.Services.Client
10     System.Runtime.Serialization
11     System.Runtime.Serialization.Json
12     System.Xml
13     System.Xml.Linq
14     System.Xml.Serialization
15     System.Xml.Utils
16     System.Xml.XPath
17     System.ComponentModel.Composition
18     System.ComponentModel.Composition.Initialzation
19     System.ComponentModel.DataAnnotation
20     System.ServiceModel
21     System.ServiceModel.DomainServices.Client
22     System.ServiceModel.DomainServices.Client.Web
23     System.ServiceModel.Extensions
24     System.ServiceModel.NetTcp
25     System.ServiceModel.PollingDuplex
26     System.ServiceModel.Syndication
27     System.ServiceModel.Web
28     System.ServiceModel.Web.Extensions
29     System.Windows
30     System.Windows.Browser
31     System.Windows.Controls
32     System.Windows.Controls.Data
33     System.Windows.Controls.Data.DataForm.Toolkit
34     System.Windows.Controls.Data.Input
35     System.Windows.Controls.Data.Toolkit
36     System.Windows.Controls.DataVisualization.Toolkit
37     System.Windows.Controls.DomainServices
38     System.Windows.Controls.Input
39     System.Windows.Controls.Input.Toolkit
40     System.Windows.Controls.Layout.Toolkit
41     System.Windows.Controls.Navigation
42     System.Windows.Controls.Theming
43     System.Windows.Controls.Theming.*
44     System.Windows.Controls.Toolkit
45     System.Windows.Controls.Toolkit.Internals
46     System.Windows.Data

 

对,只有这么多类库可用!大大阉割了。大体上,这些类库可以分为以下几类:
·mscorlib、System 和 System.Core 这几个是.NET的核心类库,完整迁移到sl了
·Microsoft.CSharp 和 Microsoft.VisualBasic 这里表明可以使用 c#和vb.net特有的一些语言特性
·System.Json 和 System.Xml 这两个说明可以支持json和xml,心里有了个底
·System.Net 这个是好东西啊,点开看看!它支持Socket,WebClient,WebRequest等类,看来sl4在网络方面是下足了血本~
·System.ComponentModel.* 这个....对,在mvc项目中见到
        封装了对数据模型操作的一些辅助类
        如使用DataAnnotabion可以使用特性标签的方式对类的成员做方便的校验,没想到在sl里面见到老朋友了:)
·System.ServiceModel.*  这个是新东西
        在接触几个示例代码后,发现这是和wcf data service, wcf ria service相关的一些类库,封装了sl和服务器端的通讯协议
        这玩意....很庞大很陌生,要好好看看
·System.Windows.Controls.* 这个.....比较晕,对这些类库我有很大意见:
        关于命名空间
            看到这个命名空间,先是愣了一下,还以为是winform用的,狠不幸,它给wpf和silverlight无情的征用了:<
            老的winform控件库在哪儿呢?倒是没搬家,还是在System.Windows.Forms下面
            很显然,从这点看:
               (1)WPF和Silverlight共享一套控件类库;
               (2)并未使用 System.WPF 或 System.Silverlight命名空间,看来ms对wpf和sl的将来抱有极大的期望,取代winform是时间早晚的事?
        此外,WPF的控件太分散了
            它们分布在若干的命名空间中(而winform的控件完全在System.Windows.Froms下)
            这会造成什么影响呢,以下就是它给xaml带来冗长的弊病以及编程上记忆困难的毛病,如下:

        xmlns:riaControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.DomainServices" 
        xmlns:data
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" 
        xmlns:dataForm
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit"
        xmlns:navigation
="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
        
<riaControls:DomainDataSource ...>
        
<data:DataGrid ... />

 

 

2. SL 4 阉割掉的重要类库 System.Data.*

    看着看着,忽然就疑惑了,数据操作呢?这么不见 System.Data.* 相关类库呢?
    对!就是没有!这意味着不能使用 ADO.NET 操作数据库,这个狠啊,阉割得利害.....
    经过查资料,调程序,得知sl可以使用 socket, webclient, webrequest, wcf, wcf data service, wcf ria service 来访问服务器数据。
    (1)其中,socket是要自己写通讯逻辑了,包括数据的结构,这适合游戏编程,若用来传递大批量的数据库数据,还有很大的封装代码量要做。
    (2)wcf简化了socket编程,可少关注些交互协议,数据量不大的情况也可以用做游戏编程,简单封装后也可以用于传递数据库数据,这个网上见到几个例程。
    (3)webClient和webrequest可以用http协议访问网站,这个.....可以用这个返回text、xml、json等文本数据,那么原有的jquery+webhandler架构就可以利用起来了。不过,sl4既然没有javascript了,json格式还有什么用呢?用System.Json还原成类对象应该是一个路子,这个有空可以做个示例。
    (4)wcf data service 原先好像叫 ado.net data service,还有wcf ria service,是微软提供的服务器端数据访问框架,是基于 linqToDb 和 EntityFrameWork 的,现阶段好像只支持 sqlserver。访问其它数据库?呃.....这个......我想,也不是不可以,应该有很大的工作量要做。

     注:本来打算使用 sl来建类似 orale plsql developer 的软件,忽然就迷茫了,首先,sl4不支持ado.net无法直接操作数据库,此外,socket还有古怪的安全策略,先要用943端口给sl传递一个Policy文件,老的数据库端口程序当然没有这种逻辑,这个.....怎么玩?看来sl4好像就是限制死不能与老程序直接用socket通讯,必须重新开发服务器端程序。
    注:至于其它阉割掉的类库或功能,可创建 Silverlight 类库项目,自己用代码实现,这是一个路子


3. 古怪冗长不合常规的xmal语法及属性定义方法

    为什么要用外部属性:x:Name 而不是 Name?
        <Button x:Name="addNewEmployee" Width="90" Content="Add Employee"  Margin="4,0,0,0"/>
        难道 Button 连个 Name 或者 ID 属性都没有么?
        此外,为什么用 Content 属性,而不是 Text 属性?
       
    为什么绑定表达式这么古怪且冗长?
        <data:DataGrid ... ItemsSource="{Binding Data, ElementName=employeeDataSource}" />
        <data:DataPager ... Source="{Binding Data, ElementName=employeeDataSource}" />
        为什么数据源有这么多的名称?ItemSource, Source, 为什么不用传统的 DataSource?
        为什么不直接是:<data:DataPager ... DataSource="employeeDataSource" />
       
    为什么资源表达式这么古怪且冗长?
        <TextBlock Text="Employee List" Style="{StaticResource HeaderTextStyle}" />
        为什么不直接是:<TextBlock Text="Employee List" Style="HeaderTextStyle" />
       
    为什么控件表达式这么冗长:

        <riaControls:DomainDataSource Name="employeeDataSource" LoadSize="20" QueryName="GetSalariedEmployees" AutoLoad="True">
            
<riaControls:DomainDataSource.DomainContext>
                
<ds:OrganizationContext/>
            
</riaControls:DomainDataSource.DomainContext>
            
<riaControls:DomainDataSource.SortDescriptors>
                
<riaControls:SortDescriptor PropertyPath="VacationHours" Direction="Ascending" />
            
</riaControls:DomainDataSource.SortDescriptors>
            
<riaControls:DomainDataSource.FilterDescriptors>
                
<riaControls:FilterDescriptor 
                    PropertyPath
="VacationHours" 
                    Operator
="IsGreaterThanOrEqualTo"
                    IgnoredValue
=""
                    Value
="{Binding ElementName=vacationHoursText, Path=Text}"  >
                
</riaControls:FilterDescriptor>
            
</riaControls:DomainDataSource.FilterDescriptors>
        
</riaControls:DomainDataSource>
        而不是
        
<riaControls:DomainDataSource Name="employeeDataSource" LoadSize="20" QueryName="GetSalariedEmployees" AutoLoad="True">
            
<DomainContext>
                
<ds:OrganizationContext/>
            
</DomainContext>
            
<SortDescriptors>
                
<SortDescriptor PropertyPath="VacationHours" Direction="Ascending" />
            
</SortDescriptors>
            
<FilterDescriptors>
                
<FilterDescriptor 
                    PropertyPath
="VacationHours" 
                    Operator
="IsGreaterThanOrEqualTo"
                    IgnoredValue
=""
                    Value
="{Binding ElementName=vacationHoursText, Path=Text}"  >
                
</FilterDescriptor>
            
</FilterDescriptors>
        
</riaControls:DomainDataSource>

 

 

4. 其它感觉到不爽的地方:

    在vs2010中 xaml 展示很慢很慢很慢,比aspnet webform 还慢得多
    为什么sl程序调试时不能更改代码?
    为什么sl不支持二进制序列化?
    sl调试时经常遇到莫名奇妙的错误,浏览器显示错误,空白一片


以上是个人学习sl 4遇到的一些疑问,请知情的园友不啻解答,非常感谢

 

 

------- 我是淫荡的分隔线 ----------------------------------------------------

 

/*备注*/

 

先谢谢大家的解答了:)
看了两天的书《Silverlight 4 in action》(推荐看看不错的),稍微解开一点疑惑,这里大致先写一下我的收获:

(1)关于 x:Name 属性
    WPF是支持用Name的,而silverlight只能用x:Name
    而且该书作者说为了兼容性,最好还是写成 x:Name
    但是....我还是讨厌x:Name,能简就应该简,去掉x,若能改用ID那是更喜欢

 

(2)Content 属性我理解了,这个可以接受。
    WPF绝大部分的控件都是继承至ContentControl,该类正代表了WPF灵活的UI模型
    该控件内部可以容纳任何UIElement对象,举个Button的例子,以下三种写法都可以:
    <Button Width="150" Height="75" Content="Hello!" />
    <Button Width="150" Height="75">
        <Button.Content>
            <TextBox Height="24" Text="TextBox" Width="100" />
        </Button.Content>
    </Button>
    <Button Width="200" Height="100">
        <StackPanel>
            <TextBlock Text="Playing" HorizontalAlignment="Center" />
            <MediaElement Height="75" Width="125" Stretch="Uniform" Source="PeteAtMIX10ch9.wmv" />
        </StackPanel>
    </Button>

 

(3)关于命名空间+对象+属性的表达式,我觉得还是相当的冗长,像这种语法:
      <riaControls:DomainDataSource
          <riaControls:DomainDataSource.SortDescriptors>
              <riaControls:SortDescriptor PropertyPath="VacationHours" Direction="Ascending" />
          </riaControls:DomainDataSource.SortDescriptors>
          ...
      </riaControls>
      缠缠绵绵浩浩荡荡的,简直不具备可读性

 

(4)关于数据绑定,也觉得相当的冗长。
    首先是表达式:
        <data:DataGrid ... ItemsSource="{Binding Data, ElementName=employeeDataSource}" />
        为什么不干脆一点用DataSource="employeeDataSource"呢
    其次,WPF中表示数据源的属性不统一,据我所知的有:
        属性名          使用者
        ------          -------
        ItemsSource     DataGrid
        Source          DataPager
        DataContext     Grid
    为什么不统一呢?有种感觉,微软的 WPF 和 ASP.NET 项目组似乎没有什么互动交流。
    属性名称这种东西是小,但遵循一致性的设计是很重要的,可以减少很多疑问。
       
(5)关于去除ado.net的问题,仔细想想炭炭同学说得是对的
     虽然说sl4支持tcp/udp,理论上直连数据库是没有问题的。但对于公开在广域网上的程序,如此多的客户端都保持数据库连接的确是不可想象的,只能用服务器端统一处理。
     我的本意是想做一个基于浏览器的类似 oralce plsql developer 那样的软件,实现数据库的管理以及语法高亮什么的,使用者不会太多,所以希望可以直连数据库,且不需要服务器。既然sl不支持ADO.NET,那只能另寻它法。
     题外话,现在桌面的程序,大部分都可以改造成浏览器版本,而sl就是一个很好的载体。若不考虑操作系统兼容的话,用浏览器承载WPF也不错。

 

(6)总得说来,xaml属性的语法我还是觉得很罗嗦,可读性比较差,不够清爽
     尤其是看惯了mvc view 辅助属性的简洁语法后,再来看xaml,觉得像眼睛里脑子里有一团毛线似的,晕忽忽的
     xaml可以看做是标准的xml,很严谨。但反过来说,xml太罗嗦了,所以才有json的兴旺
     也许,我感觉,以后会出现新的wpf界面引擎的,就像mvc下面的rasor一样

 

(7)此外,想咨询下,关于sl4与服务器端的数据库数据通讯,大家都采用什么技术?
     个人感觉wcf dataservice 和 wcf ria service 的实施对现有项目架构(基于jquery+服务器端生成json)的改动很大,老的技术积累都利用不起来;
     且ria service自动生成缠缠绵绵的代码,将技术细节封装得太高层了,心里总是没有那种看到实际代码逻辑,心里踏实的感觉
     此外,这两项技术和sqlserver结合太紧密了,以后想做数据库迁移是很困难的事,虽然说有各种开源项目支撑,如EntityFrameWork for oralce,但我需要一个灵活切换底层数据库的架构,不可能每切换一个数据库就去找相应的类库,如 EntityFrameWork for sqlite, for mysql, for .....
     那么,我自己是倾向于用 webrequest 和 webclient 来请求json数据这种方案(当然,可以做些遍历封装),这样服务器端逻辑都不用改动。
     你们呢?
    

    

    昨天把随笔发出来后,感觉有些不安,毕竟对sl4了解得不够深,发表这些看法不够稳妥。但反过来想想,让完全没有接触过sl的程序员来编程,才能看出sl的易用性和学习难度如何,我也就坦然不改动原文了。虽然之前没有真正编写sl程序,但跟踪它已经很久了。微软的开发类产品,大家都知道的,没有3个版本是不会稳定的。在未稳定前,可以学习它,但不要轻易使用在产品中,除非经过详细的测试或者有这个专业需求。
    平心而论,就功能而言,sl4的功能已经足够完善,至少足以与flash抗衡甚至更高出一些。毕竟是晚些出现的,可以汲取前者的优点,而且有语言上和开发环境上的优势。这次算是将它用作实际项目中,但我发现sl4的学习曲线并不平坦,光看网页上大家发表的一些sl功能文章是无法掌握sl的设计实现和编程原理,最终还是不得不静下心来下载出版的书籍来看。
    题外话,再次推荐一下这本书《silverlight 4 in action》,这本书入门足够了,网上林林总总的sl文章也可以不用浪费时间看了,有很多还因为版本问题代码已经不能用了,会浪费学习时间。

    再次谢谢大家热心的解答

 

 

posted @ 2010-10-27 18:51 Kevin Cheng 阅读(813) 评论(11) 编辑
2010年10月19日
javascript 类和命名空间的模拟

就当我是重复造轮子吧,整理该文档给有需要的人用,包括我:)

先上一段最简单的:

// 以下几行代码展示了命名空间、类、以及函数的模拟定义和使用:
NameSpace = {};
NameSpace.Class 
= function(){
  
this.Method = function(info){alert(info);}
};
new NameSpace.Class().Method("Hello world");

 

 

再来一些可见到的,各种情况的代码

1.类的模拟

  // 类定义
  function Class(info){
    
// 私有成员
    var privateData = "private data";
    
var privateMethod = function(){writeline("private");};
    
function privateMethod2(info){writeline("private");}

    
// 公有成员(使用this)
    this.Data = "public data";
    
this.Method = function(){writeline(info);};
  };
  
  
// 类的静态成员
  Class.StaticData = "static data";
  Class.StaticMethod 
= function(info){writeline(info);};

 

 

2.命名空间的模拟

function NameSpace(){}
或者
NameSpace 
= {};
或者
NameSpace 
= new Object();

 


3.目标:创建类实例,并调用实例方法

var o = new NameSpace.Class("hello world");

o.Method();

  // 使用已有的类定义,并用静态方法挂到NameSpace下
  NameSpace.Class1 = Class;
  
new NameSpace.Class1("new NameSpace.Class1().Method()").Method();

  
// 或者:新建类定义
  NameSpace.Class2 = function(info){
    
this.Method = function(){writeline(info);};
  };
  
new NameSpace.Class2("new NameSpace.Class2().Method()").Method();

 

 

4.目标:调用类的静态函数

NameSpace.Class.StaticMethod();

  // 静态对象+静态方法
  NameSpace.Class3 = {};  // {}表示这是一个对象,或者用new object();
  NameSpace.Class3.Method = function(info) {writeline(info);};
  NameSpace.Class3.Method(
"NameSpace.Class3.Method()");

  
// 或者:new一个对象赋予静态成员
  NameSpace.Class4 = new Class("NameSpace.Class4.Method()");
  NameSpace.Class4.Method();
  
  
// 或者:匿名函数用于定义类,再用new创建对象
  NameSpace.Class5 = new (function(info){
    
this.Method = function(){writeline(info);};
  })(
"NameSpace.Class5.Method()");
  NameSpace.Class5.Method();
  
  
// 或者:JSON方式(类定义+创建同时完成)
  // 优点是简单,缺点是不能传递参数进去
  NameSpace.Class6 = {
    Method : 
function(info){writeline(info);}
  };
  NameSpace.Class6.Method(
"NameSpace.Class6.Method()");

 

代码下载:/Files/surfsky/oo.htm

ps.很开心,vs2010对js的智能感知越来越好用了:p

 

posted @ 2010-10-19 16:12 Kevin Cheng 阅读(174) 评论(1) 编辑
2010年10月12日
ASP.NET MVC 换肤方案

这个换肤是指动态切换视图文件夹,不是指换css和image,你懂的....

使用起来也很简单,核心就这么几句:

    public class Global : System.Web.HttpApplication
    {
        
protected void Application_Start(object sender, EventArgs e)
        {
            InitRouting(RouteTable.Routes);

            
// 使用自定义的皮肤视图引擎 SkinViewEngine
            
// 对应的视图文件夹为:/Skins/皮肤名称/控制器名称/
            
// 设置皮肤:HttpContext.SetSkinName(skin);
            
// 获取皮肤:string skinName = HttpContext.GetSkinName();
            ViewEngines.Engines.Clear();
            ViewEngines.Engines.Add(
new SkinViewEngine(GetSkins()));
        }

        
private static void InitRouting(RouteCollection routes)
        {
            routes.MapRoute(
"default", "{controller}/{action}", new {controller="engine", action="index"});
        }

        
// (遍历Skins目录)获取网站能提供的所有皮肤方案
        public static string[] GetSkins()
        {
            List
<string> skins = new List<string>();
            
string skinFolder = HttpContext.Current.Server.MapPath("~/Skins/");
            
foreach (string folder in Directory.GetDirectories(skinFolder))
                skins.Add(
new DirectoryInfo(folder).Name);
            
return skins.ToArray();
        }
    }

 

代码下载:/Files/surfsky/MvcSkinDemo.rar

 

posted @ 2010-10-12 13:25 Kevin Cheng 阅读(564) 评论(3) 编辑
2010年10月11日
关于MVC项目目录结构调整的想法
摘要: MVC项目的默认目录结构: Scripts : js 文件 Content : css, image 等文件 Controllers : 控制器目录 HomeController.cs : Home 控制器,对应的视图在Views/Home/目录下 ProductController.cs : Product 控制器,对应的视图在Views/Product目录下 Models : 模型目录,里面放...阅读全文
posted @ 2010-10-11 09:45 Kevin Cheng 阅读(389) 评论(1) 编辑
2010年10月7日
ASP.NET Razor 视图引擎编程参考
摘要: 转载请注明出处:http://surfsky.cnblogs.comRasor 视图引擎 http://msdn.microsoft.com/zh-cn/library/ff849693.aspx http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b7937c34-3b53-47b7-ae17-5a72fa700472&...阅读全文
posted @ 2010-10-07 16:40 Kevin Cheng 阅读(813) 评论(1) 编辑
ASP.NET MVC 编程参考
摘要: 转载请注明出处:http://surfsky.cnblogs.comMVC 参考 http://msdn.microsoft.com/zh-cn/dd408813.aspx MVC 的基本思想 ·Module : 模型。可以看做实体类,可用各种技术实现,例如Microsoft Entity Framework、NHibernate等 ·View : 视图。可以与某个实体...阅读全文
posted @ 2010-10-07 16:33 Kevin Cheng 阅读(955) 评论(0) 编辑
2010年8月13日
DevExpress ASPxGridView 使用文档七:客户端API
摘要: 转载请注明出处:http://surfsky.cnblogs.com/----------------------------------------------------------- ASPxGridView 客户端API---------------------------------------------------------API PerformCallback(this.valu...阅读全文
posted @ 2010-08-13 13:11 Kevin Cheng 阅读(773) 评论(0) 编辑
DevExpress ASPxGridView 使用文档六:模板
摘要: 转载请注明出处:http://surfsky.cnblogs.com/----------------------------------------------------------- ASPxGridView 模板---------------------------------------------------------ASPxGridView 提供以下几种自定义的模板视图 EditF...阅读全文
posted @ 2010-08-13 13:10 Kevin Cheng 阅读(796) 评论(1) 编辑
DevExpress ASPxGridView 使用文档五:事件
摘要: 转载请注明出处:http://surfsky.cnblogs.com/----------------------------------------------------------- ASPxGridView 事件---------------------------------------------------------ASPxGridView 默认是以callback方式(ajax方...阅读全文
posted @ 2010-08-13 13:09 Kevin Cheng 阅读(1344) 评论(3) 编辑
DevExpress ASPxGridView 使用文档四:数据源
摘要: 转载请注明出处:http://surfsky.cnblogs.com/----------------------------------------------------------- DataSource 支持的数据源-- DataTable-- IList-- BindingList-- XXXDataSource--------------------------------------...阅读全文
posted @ 2010-08-13 13:08 Kevin Cheng 阅读(610) 评论(0) 编辑
DevExpress ASPxGridView 使用文档三:编辑
摘要: 转载请注明出处:http://surfsky.cnblogs.com/----------------------------------------------------------- ASPxGridView 编辑-- 注意:想让GridView支持修改功能,必须指定KeyFieldName---------------------------------------------------...阅读全文
posted @ 2010-08-13 13:07 Kevin Cheng 阅读(1021) 评论(0) 编辑
DevExpress ASPxGridView 使用文档二:列
摘要: 转载请注明出处:http://surfsky.cnblogs.com/----------------------------------------------------------- ASPxGridView 列---------------------------------------------------------基本列(GridViewDataColumn) <dxwgv:...阅读全文
posted @ 2010-08-13 13:06 Kevin Cheng 阅读(1274) 评论(0) 编辑
DevExpress ASPxGridView 使用文档一:概述
摘要: 转载请注明出处:http://surfsky.cnblogs.com/前言 说实话,对于这种控件类的使用,我并不喜欢使用或者编写教程之类的文章,一来本来就很简单,二来实在没有这种时间。就我的经验而言,控件类学习最快的入门方式就是边看官方示例,边整理编程文档,此后基本上就可以脱离示例,看文档就可以编程了。此系列文档是ASPxGridView的编程有效参考,前前后后整理了很多回了,给有需要的人使用:)...阅读全文
posted @ 2010-08-13 13:04 Kevin Cheng 阅读(1456) 评论(3) 编辑
2010年6月28日
我写的第一个jquery插件:jquery.photoFrame(version 0.2)
摘要: 先看效果introduce jQuery photoframe plugin A useful plugin to beautify image or text by wrapping target with image frame Copyright (c) 2010 surfsky Free to use but don't modify this notation @author: surf...阅读全文
posted @ 2010-06-28 12:49 Kevin Cheng 阅读(1961) 评论(5) 编辑
2010年6月23日
感谢jquery和firebug,让我也终于敢于写javascript了
摘要: 酝酿已久咯,真是发自内心的感慨,感谢jquery和firebug,让我也终于敢于写javascript了.....T_T jquery作为一个js中间层,抹平了浏览器的鸿沟,并可用简洁而美妙的语法操作DOM元素,简短的代码确可以成就赏心悦目的动态效果;而后者作为js调试平台,拯救了无数的debugger怨男怨妇,曾几何时,我们为了查看变量值,我们不得不不停的alert,再alert@_@。 并不是...阅读全文
posted @ 2010-06-23 21:20 Kevin Cheng 阅读(287) 评论(2) 编辑
2010年6月17日
Microsoft Ajax Minifier 介绍
摘要: Microsoft Ajax Minifier 介绍是一个用于压缩js和css文件的免费工具http://aspnet.codeplex.com/releases/view/40584http://www.asp.net/ajaxLibrary/AjaxMinDocumentation.ashx转载请注明出处:http://surfsky.cnblogs.com/-----------------...阅读全文
posted @ 2010-06-17 10:38 Kevin Cheng 阅读(168) 评论(0) 编辑
2009年12月3日
发布一个RSS辅助类
摘要: http://www.cnblogs.com/surfsky/archive/2009/12/03/1616230.html 发布一个RSS辅助类,是使用 XmlSerializer 解析和编码rss xml的。希望对大家有用:)参考文档:·http://cyber.law.harvard.edu/rss/rss.html·http://www.cnblogs.com/rssu...阅读全文
posted @ 2009-12-03 15:11 Kevin Cheng 阅读(283) 评论(0) 编辑
2009年11月6日
防止基础表数据变动,导致相关的历史记录数据产生变动的解决方案
摘要: http://www.cnblogs.com/surfsky/archive/2009/11/06/1597242.html 首先先定义两个概念: 基础表:一般是维度表,如用户、部门、产品等基础信息表。 记录表:其它有依赖于基础表的表就暂且称之为记录表吧。问题的提出: 若不做特殊处理,基础表数据的变动,会导致相关的记录表历史数据无法反映历史原貌。 如产品价格更改等,查某张历史订单,发现其产品信息已...阅读全文
posted @ 2009-11-06 10:40 Kevin Cheng 阅读(257) 评论(0) 编辑
仅列出标题  下一页
Copyright ©2012 Kevin Cheng
精于斯,乐于斯。
昵称:Kevin Cheng
园龄:6年2个月
粉丝:18
关注:1
<2012年1月>
日一二三四五六
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

搜索

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论
  • 我的标签
  • 更多链接

我的标签

  • Rss RssItem RssChannel XmlSerializer(1)
  • MVC ASP.NET Razor(1)
  • MVC Razor ASP.NET(1)
  • MVC ASP.NET(1)
  • javascript oo 类 对象 命名空间(1)
  • ASP.NET MVC SKIN 换肤(1)
  • Silverlight WPF(1)

随笔分类

  • 日子(3)
  • .NET(14)
  • .NET组件控件(15)
  • IT新闻(1)
  • 报表开发(1)
  • 代码生成器(1)
  • 工作流引擎
  • 建模与快速开发 (5)
  • 数据库 (4)
  • 杂项(7)

随笔档案

  • 2010年12月 (1)
  • 2010年11月 (1)
  • 2010年10月 (6)
  • 2010年8月 (7)
  • 2010年6月 (3)
  • 2009年12月 (1)
  • 2009年11月 (2)
  • 2009年5月 (2)
  • 2008年12月 (1)
  • 2008年8月 (1)
  • 2008年7月 (1)
  • 2007年12月 (1)
  • 2007年6月 (1)
  • 2007年5月 (1)
  • 2007年3月 (2)
  • 2007年1月 (1)
  • 2006年12月 (1)
  • 2006年11月 (1)
  • 2006年10月 (1)
  • 2006年9月 (1)
  • 2006年8月 (3)
  • 2006年6月 (5)
  • 2006年3月 (2)
  • 2006年2月 (1)
  • 2005年12月 (7)

文章分类

  • .NET(1)

相册

  • 回忆

Blogs

  • DbToCode
  • RapidTier
  • SmartPersistenceLayer
  • 灵感之源

NET WebSite

  • ASP.NET
  • CodeProject
  • CSDN
  • GoDotNet
  • MSDN
  • SourceForge

Special

  • icsharpcode.com
  • Open License
  • Python

最新评论

阅读排行榜

评论排行榜

推荐排行榜