[翻译]Chameleon介绍(1) : 与CS2.1的区别

[原文]:http://getben.com/archive/2007/01/09/introduction-to-chameleon-differences-from-cs2-1.aspx

这篇文章属于我的文章系列:Chameleon介绍

Chameleon代表Community Server界面实现方式上的一个大的更改。变化包括:

  1.  取消了皮肤文件
    Community Server 2.1及以前的版本包含了大量的通用控件,每个都有自己的ASCX文件,用以包含它们的界面结构。Chameleon则为SiteUrls.config里声明的每个URL(可能一个ASPX对应SiteUrls.config里的多个URL)定义单个ASPX页面。

    每个ASPX文件定义了页面展现的整个内容,这样就允许对整个页面布局和行为进行更多的控制。界面开发人员根据情况自己决定是否使用主版页和用户控件。现在一个页面不再是六个或者更多ASCX文件的集合了——默认情况下每个展现的页面只对应一个文件(不计算主版页的话)。

    • 一个完整的Blog界面现在只包括8个文件(CS2.1里是55个,也就是减少了85%)
    • 一个完整的网站界面现在只包括70个文件(CS2.1里是164个,减少了58%)
  2. 通用控件
      Community Server 2.1及更早的版本里的控件具有着专用的用户界面和行为。2.1及以前版本的大多数控件,都通过在它们相关的皮肤文件中查找预先定义的(并且经常是含义模糊的)子控件ID,来生成这些子控件。这样,这些控件就约束了界面开发者的创意:它们只支持预先定义了数量和类型的子控件,而且,它们行为和完成后的动作也是预定义的,无法被改写。

    与之不同,Chameleon则根据Community Server 的API 定义了标准的一系列通用控件。Chameleon控件不是通过界面把数据“推”进页面(在CS2.1里预定义子控件的控件就是采用这种方式),而是从Community Server的API里“拉”出数据,给界面开发人员以无比的灵活性。Chameleon控件支持声明性的,可扩展的“DisplayCondition”,用于定义在什么条件下一个控件应该显示;也支持通过声明来定义的“Actions”,用于定义当控件支持的事件引发时应该怎么处理(比如表单提交成功)。

    Chameleon被实现为一个简单的声明性UI语言,包含了与Community Server API里每一种类型的数据相关的控件。

    例如,在Chameleon,用户的呢称可以通过UserData控件来获取和显示:

    <CSControl:UserData Property="DisplayName" runat="server" Text="Display name is {0}" LinkTo="Profile" />

    这将会输出:

    Display name is Ben

    链接到我的个人资料。

    无论你想要在哪里显示用户的数据,都可以使用同一个控件:UserData,控件明白它自己的上下文...

  3. 隐式的,上下文相关的数据绑定
    • 所有的Chameleon控件都支持隐式的,上下文相关的数据绑定。例如:
      放在SectionList控件里的UserData控件会显示与每个Section相关的第一个所有者的数据(如果这个Section拥有一个或更多的拥有者的话;同样地,UserList控件将会列出这个Section的所有拥有者)。
    • 放在PostList控件里的UserData控件会显示每个Post的作者的相关数据。

    很多用于列出数据的控件(例如SectionList和UserList)都支持“QueryOverrides”选项,允许界面开发人员定义或改写默认的隐式数据源,或者定义分页控件来对列出的数据进行分页。

    隐式数据源可以通过设置控件的DataSource属性来改写。然而,大多数情况下(在CS3.0默认模板里是所有情况下),没有这个必要。

    下面是隐式上下文相关数据绑定的一个示例:

    <CSForum:ForumPostList runat="server">
       
    <QueryOverrides SortBy="SortOrder" PagerID="Pager" PageSize="40" />
       
    <HeaderTemplate>
          
    <ul>
       
    </HeaderTemplate>
       
    <ItemTemplate>
          
    <li>
             
    <CSForum:ForumPostData Property="Subject" runat="server" />
             by
             
    <CSControl:UserData Property="DisplayName" LinkTo="Profile" runat="server" />
          
    </li>
       
    </ItemTemplate>
       
    <FooterTemplate>
          
    </ul>
       
    </FooterTemplate>
    </CSForum:ForumPostList>
    <CSControl:Pager runat="server" id="Pager" />

    将会根据当前的下下文(例如,一个主题)列出论坛贴子,以它们的“SortOrder”排序,40个一页,分页控件会出现在帖子列表的下面:

    *         Post Subject 1 by Ben
    *        
    Post Subject 2 by Ben
    *        
    Post Subject 3 by Ben
    *        

    *         Post Subject 40 by Ben

    1 2 3

  4. 更少(或者没有)预定义的标签语句

    Community Server 2.1及更早的版本里的一些控件和方法,包含了大量硬编码的HTML标签语句。Chameleon控件,一般而言,则为界面开发人员提供了对输出HTML的完全控制。

    所有的Chameleon控件都提供了“Tag”,“CssClass”,以及“ContainerId”属性,用于定义包含控件内容简单标签。例如:

    <CSControl:UserData runat="server" Property="DisplayName" Tag="H1" CssClass="CommonTitle"
     ContainerID="UserName" />

    将会输出

    <h1 id="UserName" class="CommonTitle">Ben</h1>

    所有的Chameleon控件都支持一个“LeaderTemplate”和“TailerTemplate”属性,它们的值会输出在控件内容的前面(Leader)和后面(Tailer)。例如:

    <CSControl:UserData runat=”server” Property=”DisplayName” LinkTo=”Profile”>
       
    <LeaderTemplate>
          
    <div id=”UserArea”>
          
    <h2 style=”color: #ff0000; font-size: 200%;”>
       
    </LeaderTemplate>
       
    <TrailerTemplate>
          
    </h2>
          
    </div>
        
    </TrailerTemplate>
    </CSControl:UserData>

    的输出是当前用户的DisplayName,它被指定的首部和尾部HTML所包含,并且链接到用户的个人资料页面,注意只有当控件被输出时“LeaderTemplate”和“TailerTemplate”才会输出——因此如果界面开发人员在UserData控件上设置了“DisplayCondition”,首部HTML和尾部HTML,以及控件的内容,都只有在条件为真时才会输出。

  5. 取消了界面继承

    界面继承是CS2.1及更早版本里的一个不常使用而且容易令人困惑的功能。如果一个界面没有定义一个需要的皮肤文件,CS2.1和以前的版本会从默认界面加载相应的皮肤文件。这种事不会再发生了。

    Chameleon里所有的界面都必须是完整的。这样使得界面更容易提取,也更加可移植。要想发布一个Chemeleon界面,只需要拷贝web/theme/[THEME_NAME]目录下的内容,不再有依赖于外部(除非界面开发人员引入了对外部的依赖)。

  6. 对控制面板的分离

    控制面板现在与网站界面完全分离——控制面板需要的所有的主版页,样式表,图片等等现在都包含在WEB/ ControlPannel目录下。界面开发人员不再需要手动分离控制面板(译:需要的部分),或者设计同时支持前台网站和后台控制面板的界面。

这些就是CS2.1和CS2007里界面开发的比较大的区别。在我的下一篇Chameleon文章里,我将开始介绍Chameleon基本控件。

如果你有任何关于Chameleon的问题,请通过我的联系表单或发表评论来告诉我。我会在这一系列的最后的文章里回答所有这些问题。

posted on 2007-04-30 05:16  deerchao  阅读(1191)  评论(7编辑  收藏  举报