jscode

            //1.0 思路
            //VH.PutSet(TagFields.PageName, PageName.Index);
            //VContent.Put(TagFields.JsCode, VH.OutString(string.Concat(this.PcMobile, "common/_Self_Js.html"), true));

面临问题:以前的的代码只能放在页面的底部,虽然可以每个页面载入自己的代码,但是代码摆放的位置不够灵活
而且代码没有压缩功能。还可能由于页面没有载入完全导致js代码执行起来有问题。看了下兰亭的网页,他们把大量的js代码,甚至JQuery库都输出在了页面上
后来想了一下为什么这样做?
可以减少不必要的js额外请求;不会因为库没有下载下来导致一些代码没有执行
实现要求:使用${jscode}标签在页面中的任意位置,输出该页面自定义的js代码,并提供对代码的压缩功能
第一个版本思路
NVelocity有一个助手,在初始化完成之后指定一个模板的名字,就可以输出这个模板的字符串,有了字符串就可以对字符串进行压缩处理
所以尝试了下
  1. #region 代码
  2. /*VelocityHelper vh = new VelocityHelper();
  3. string pathTemplate = ConfigHelper.BaseDirectory + "themes\\" + ConfigManager.GetConfig().Theme
  4. + ConfigManager.GetConfig().PCthemeDir.Replace("/", "\\") + "common\\";
  5. vh.Init(pathTemplate);
  6. vh.PutSet(TagFields.PageName, PageName.Index);
  7. string jsString = vh.OutString("_Self_Js.html");
  8. VContent.Put("jsstring", ZipHtml.GZipHtml(jsString));*/
  9. #endregion
第一:每个页面都要编写上面的代码增加了额外的开销
第二:麻烦
第三:手机模板和PC模板各自定义的js代码有可能不一样,所以_Self_Js.html不在同一个目录下,所以不行

第二个版本思路
尝试将VelocityHelper封装到页面的基类中去,变成一个静态的变量,这样不用增加额外的对象开销,而且内部的引擎不用做过多的初始化
在static HttpCustom()中尝试将其初始化,模板路径和HttpCustom路径保持一致,并且只初始化一次
这样在每个页面中 只需要调用就可以生成这个页面的js代码,同时传递了PcMobile目录,就可以为PC和Mobile生成各自的js代码 【比第一版的思路好多了】

  1. VH.OutString(string.Concat(this.PcMobile, "common/vmjs.vm"), true)
坏处:每个页面都需要编写这个代码,代码还得需要编译
每个页面还需要PutSet这个页面的类型,才能动态的加载js代码
不灵活 也比较麻烦

第三版
既然可以在html中调用对象的方法,那么应该讲VH对象添加到数据上下文当中去
在html页面中调用这个方法
同时做进一步的封装string.Concat(this.PcMobile, "common/vmjs.vm") 封装到 VH的内部处理
将PcMobile 封装成它的一个属性,在HttpCustom识别出访问设备,也就是PcMobile初始化之后
也将VH的PcMobile 初始化,如此一来
在页面中就可以这样调用
    $VH.PutSet("pagename","index")
    $VH.OutString(true)

好处:灵活了许多
pagename 不仅仅是系统中固定的那几个值了,可以自定义
而且可以自定义是否压缩js代码
到此完成!

总结:封装思想  确定需求






【思路】-jscode的更多相关文章

  1. Spring Security 整合 微信小程序登录的思路探讨

    1. 前言 原本打算把Spring Security中OAuth 2.0的机制讲完后,用小程序登录来实战一下,发现小程序登录流程和Spring Security中OAuth 2.0登录的流程有点不一样 ...

  2. .net点选验证码实现思路分享

    哈哈好久没冒泡了,最进看见点选验证码有点意思,所以想自己写一个. 先上效果图 如果你被这个效果吸引了就请继续看下去. 贴代码前先说点思路: 1.要有一个汉字库,并按字形分类.(我在数据库里是安部首分类 ...

  3. TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

    TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...

  4. 整理下.net分布式系统架构的思路

    最近看到有部分招聘信息,要求应聘者说一下分布式系统架构的思路.今天早晨正好有些时间,我也把我们实际在.net方面网站架构的演化路线整理一下,只是我自己的一些想法,欢迎大家批评指正. 首先说明的是.ne ...

  5. js数组去重几种思路

    在一些后台语言中都内置了一些方法来处理数组或集合中重复的数据.但是js中并没有类似的方法,网上已经有一些方法,但是不够详细.部分代码来源于网络.个人总计如下:大致有4种思路 1)使用两次循环比较原始的 ...

  6. [Django]用户权限学习系列之设计自有权限管理系统设计思路

    若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ- ...

  7. 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路

    最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...

  8. ENode框架单台机器在处理Command时的设计思路

    设计目标 尽量快的处理命令和事件,保证吞吐量: 处理完一个命令后不需要等待命令产生的事件持久化完成就能处理下一个命令,从而保证领域内的业务逻辑处理不依赖于持久化IO,实现真正的in-memory: 保 ...

  9. WebGIS中快速整合管理多源矢量服务以及服务权限控制的一种设计思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在真实项目中,往往GIS服务数据源被其他多个信息中心或者第三方 ...

随机推荐

  1. 个人项目制作(PSP)

    计划: 软件的此功能的实现,个人估算需要一个周的时间. 开发阶段: 需求分析: 1> 运动员希望软件可以记录自己的得分项. 2> 运动员希望软件可以记录自己的得分具体细节. 3>运动 ...

  2. RMQ

    1.概念: RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A ...

  3. Button的enabled和clickabled的区别

    Button的enabled和clickabled的区别 setEnable设置用户是否可以点击此按钮,setClickable设置程序在某个条件下自动点击此按钮  

  4. TomTom (16Q3)数据协议基础

    title: TomTom数据协议介绍 title: TomTom数据协议介绍TomTom公司介绍主要经营的业务TomTom数据特点数据内容概述数据表命名特点数据关联特点数据的基本信息 TomTom公 ...

  5. Eclipse 启动出现错误 no java virtual machine was found

    出现此问题的原因是eclipse找不到javaw.exe的path,打开eclipse.ini文件: -startup plugins/org.eclipse.equinox.launcher_1.3 ...

  6. 定长循环队列C语言实现

    #ifndef _CONST_H_#define _CONST_H_ #include <stdio.h>#include <stdlib.h> typedef enum { ...

  7. jpg/png格式图片转eps格式的方法总结

    jpg/png格式图片转eps格式的方法总结 转自http://blog.sina.com.cn/s/blog_5410e7b50101lme2.html 用latex写论文的筒子应该遇到这样的问题: ...

  8. Linux连接Internet

    Linux连接Internet 1. Linux网卡 1.1 查看内核所扑捉到的网卡信息(已经安装到服务器并且被Linux内核识别的网卡) [root@www ~]# dmesg | grep -in ...

  9. [poj2349]Arctic Network(最小生成树+贪心)

    Arctic Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17758   Accepted: 5646 D ...

  10. pyqt4学习笔记

    信号与槽机制 信号与槽机制作为Qt最重要的特性,提供了任意两个Qt对象之间的通信机制.其中,信号会在某个特定情况或动作下被触发,槽是用于接收并处理信号的函数.例如,要将一个窗口中的变化情况通知给另一个 ...