zoukankan      html  css  js  c++  java
  • LiveHelp:方便地在Asp.net界面上添加帮助文档

    背景


    作为开发人员,我觉得应用程序有个 /Help/ 文件夹专门放帮助就行了;但是客户却要求在操作界面也放给出相应的帮助,原因是他不愿意多点击几下鼠标.好吧,You're the boss,容我想个能偷懒的方案来吧.

    实现

    首先我不打算在不同的地方重复文档的具体内容(一是我懒,二是如果有变化了要改的地方很多,而且有忽略了某处造成信息不同步的可能),那么最好的办法就是文档内容还是在原来的 /Help/ 文件夹里,你愿意到这来看还能看到;操作界面调用这里的内容(估且称在某处出现的帮助文字叫帮助块(HelpPiece)吧)。这样的话就必须给这些文档定义一个统一的格式,因为只有这样才能方便地解析出里面的帮助块,以便调用。

    根据原有文档的格式,我稍作修改,做出了以下约定:帮助块是紧随在命名的<h2>或<h3>或<h4>后面<div>。前面的<hx id="xxx">的id是此帮助块的id, 其内容是帮助块的title, <div>里的内容是此帮助块的具体内容。<hx>的id应该是唯一的,而且是在所有帮助文档的范围内唯一。

    有了这些信息,就可以打造我们的HelpPiece和HelpParser了:
    HelpPiece.cs

    HelpParser.cs

    除了上面提到的东西以外,我还在HelpParser里添加了解析一个文件,一个文件夹,一个文件夹和它所有子文件夹的三种解析方式,并记录了解析的文件的Url。

    测试完这两个类能完成它们应该完成的工作之后,下面就轮到LiveHelper这个控件了。我们第一次Render这个控件时,要解析所有指定的帮助文档,并把结果放到Cache中;以后就直接从Cache中取。Control的UI我选择了使用ibox,一个类似于lightbox(用于在当前页面弹出图片)但还能处理Html的javascript程序。
    LiveHelper.cs

    用法

    OK,现在我们能这样使用这个控件了:
    <%@ Register Assembly="LiveHelp" Namespace="LiveHelp" TagPrefix="live" %>

            
    <live:LiveHelper FileFilter="*.htm" HelpHtmlPath="~/Help" HelpId="testHelp"
                ParseMode
    ="DirectoryAndDescendants" Text="Help" runat="server">
            </
    live:LiveHelper>
            <!--或者使用默认参数值-->
            
    <live:LiveHelper HelpId="testHelp" runat="server"></live:LiveHelper>

    Html帮助文件的格式:
    ...
    <h2 id="testHelp">帮助一</h2>
    <div>
    <p>some contents here.</p>
    </div> 
    ...

    示例





    代码下载

    全部代码(包括测试,演示)下载: LiveHelp.zip.(为什么不让上传 7z 格式的文件? 我用 7z 格式压了只有35KB, 用了zip格式压缩是110KB.)

    感想

    还是正则表达式快,比XmlDocument+XPath快了十倍以上!
  • 相关阅读:
    浅谈 iOS 事件的传递和响应过程
    iOS 之渐变颜色
    系统enum的一些样式
    Storyboard操作的2个小技巧
    iOS 动画初步
    iOS之Runtime初应用
    Block使有注意点
    使用ios系统自带分享
    IOS原生地图与高德地图
    反向传值实例
  • 原文地址:https://www.cnblogs.com/deerchao/p/684471.html
Copyright © 2011-2022 走看看