随笔-68  评论-569  文章-4  trackbacks-32

 

********************************************************************
*                                                 版权声明
*
* 本文以Creative Commons的知识共享署名-非商业性使用-相同方式共享发布,请严格遵循该授权协议。
* 本文首发于博客园, 此声明为本文章中不可或缺的一部分。
* 作者网名:    浪子
* 作者EMAILdayichen (at)163.com
* 作者BLOG:  Http://Www.Cnblogs.Com/Walkingboy
*
********************************************************************

[SmartScript]js类库管理不再发愁

-Written by 浪子@cnblogs.com  (07-02-07)

摘要:

js文件路径?版本更新,客户端缓存更新?这些问题是否一直困扰你?

为什么我不能像c#一样,using一下所需要的js类库,就可以引用类库的功能,而不必要去管src,管当前的客户端缓存是否最新?

正所谓,只有想不到的没有做不到的,依据最近所得思路制作了SmartScript,轻松搞定这些问题。

 

一、脚本路径:

当你的项目中js文件越来越多,你的页面层次越来越深,每次都要仔细的处理js对应的url,保证不会引用到错的地址。

当Asp.net 2.0开始使用资源文件代替以往的script文件的时候,我们对js的引用开始越来越方便,大部分的控件厂商已经都使用了内嵌的脚本资源,我们的项目、类库、自定义控件,都无一例外的模仿使用了这个方法。

毫无疑问,这是个绝妙的方法,我们不必要再担心,我们的控件不知道会用在那个结构底下,它跟js的相对路径是什么,页面里再也看不到"http://www.cnblogs.com/"如此复杂的地址了。

但是内嵌的脚本也给了我们麻烦,每次修改js都需要rebuild整个项目!

二、版本更新:

rebuild的项目我忍了,但是不能容忍的是js文件的版本更新了,但是客户端的缓存却一直没有更新,这下子晕了,然后我要去客户端一个个清除缓存嘛?显然这是不可能了。

或者我修改所有的js链接地址?Oh,My god。开发人员准会每天骂你一百遍,想象下当你的js更新频繁的时候......

三、我的解决方案SmartScript:

首先,对于脚本的路径,我们肯定还是要保留HttpHandler的处理方式,因为它确实非常的便利。但是我们可以不使用内嵌资源,我直接读文件流,不是一样嘛:)

对于版本更新,只要为每次的js连接增加版本信息就好了,这样子版本一变,文件名也就改变,自然没有存在更新缓存的意义了,因为它对IE来说本身就是一个新的js。

要处理这些问题,首要规避的问题就是hardcode的js引入

1. <script type="text/javascript" src="boot.js"></script>

取而代之是,我希望可以像c#一样,使用一个特定的指令来引入,比如

 

1. $using("boot");


思路慢慢的清晰了,看下我的完整的boot.js启动代码 
var __SS = {};
__SS.Loads 
= new Array();

function $using(){
    
for(var i=0;i<arguments.length;i++){
        __SS.Loads.push(arguments[i]);
    }

}
;

function $load(){
    
if(__SS.Loads.length>0){
        document.write('
<script type="text/javascript" src="SmartScripts.axd?res='+__SS.Loads.join("$")+'&ver='+__SS.Version+'"><+ '/script>');
    }

}
;

 

OK。看到了,我们是用SmartScripts.axd来绑定js的HttpHandler

<httpHandlers>
    <add path="SmartScripts.axd" type="SmartScript.ScriptHandler,SmartScript" verb="*" validate="false"/>
</httpHandlers>

然后使用$Load统一载入js,为什么要多这一步呢?主要是为了以后扩展的方便,特别是多线程下载(请参考Jeffrey Zhao性能优化(7)相关文章),还有一点就是把零零碎碎的小文件合并成一个大文件下载。

可能有人已经发现上面的一个bug,__SS.Version,没有定义?:),缓存的问题就是在这里解决的,首先这个版本信息是被我配置在config文件里面的,每次都会动态读取,这样子如果更新js文件,只要同时更新config的版本信息,这段js自动就会使用新的版本进行替换。看下配置文件的样子吧

<?xml version="1.0" encoding="utf-8" ?>
<SmartScript cache="true" compress="false" gzip="true" ver="0.11.2" >
<Scripts>
    <Script name="boot" url="boot.js"/>
    <Script name="KINN" url="KINN/KINN.js"/>
    <Script name="KINN.UI" url="KINN/UI.js"/>
</Scripts>
</SmartScript>

是否缓存js(对boot程序作了特别处理,不作缓存,这样子保证版本更新的时候,boot一直都是最新的),是否压缩js(语法),是否采用gzip,还有版本信息。

然后才会js作了个别名处理。

四、扩展&Demo

东西虽小,但是却是个无侵入,开放的第三方脚本管理方案,它让我可以任意的引用第三类库,也可以灵活的替换。而本身又是无框架依赖的:)

其实我原来的设想还有一个更重要的一步,就是自动依赖:在配置文件里面设置好每次js的互相依赖情况,然后自动监测,自动会按所需顺序逐个帮你加载所需的js文件,不过一直没有想到好的实现方法,所以暂时放弃了,留待后面有机会的时候再扩展吧。

SmartScripts的使用,因为太简单了,简单得我都不知道怎么写,帖小段代码吧:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>

    <script type="text/javascript" src="SmartScripts.axd?res=boot"></script>

    <script type="text/javascript">
    $using("KINN");
    $using("KINN.UI");
    $load();
    </script>

</head>
<body>
    <form id="form1" runat="server">
        <div>
            <input type="button" onclick="KINN();" value="KINN" />
            <input type="button" onclick="UI();" value="KINN.UI" />
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /></div>
    </form>
</body>
</html>

页面里面引入2个文件,别名分别为KINN和KINN.UI.

两个button分别调用了KINN和KINN.UI里面的方法

demo代码下载:http://files.cnblogs.com/walkingboy/SmartScript.WebTest.rar

posted on 2007-02-07 20:27 浪子 阅读(3445) 评论(50)  编辑 收藏 所属分类: JavaScript/CSS

评论:
#1楼  2007-02-07 20:49 | teana      
非常巧妙。。学习了。
  回复  引用  查看    
#2楼  2007-02-07 21:26 | anbei [未注册用户]
靠,communityserver早就有这个代码了,还搞什么授权协议
  回复  引用    
#3楼  2007-02-07 21:36 | Cat Chen      
如何要引用嵌入在dll内的js资源呢?随着dll的版本更新,该js也更新,这是正常的事情。在客户端,你该如何获取WebResource.axd那样的地址呢?呵呵……

我写过《深入理解 ASP.NET 与客户端缓存》系列文章,写完《Part 2 - ASP.NET 支持》(http://www.cnblogs.com/cathsfz/archive/2006/12/07/584826.html)之后,我就一直没有写《Part 3》。因为我发现ASP.NET的资源嵌入发已经把事情搞得很复杂,要开发更好的相关功能,要么就自己重新实现嵌入资源的调用,要么是通过reflection调用原本的资源接口。为什么MS不把资源调用的方法做成public或者protected的呢?或许它认为这已经是ASP.NET的内核功能,大家都不会去改进它。
  回复  引用  查看    
#4楼  2007-02-07 22:16 | Jeffrey Zhao      
@Cat Chen
在ASP.NET AJAX中,生成ScriptResource.axd后面一大串的方法,就是通过反射机制调用了ASP.NET的internal功能。
  回复  引用  查看    
#5楼  2007-02-07 22:36 | 孤叶(学习.net框架)      
嗯!
学习了
  回复  引用  查看    
#6楼  2007-02-07 23:06 | Cat Chen      
@Jeffrey Zhao
是的,可以直接抄Atlas的代码,只不过我还是认为这种做法比较讨厌而已,呵呵。
  回复  引用  查看    
#7楼  2007-02-08 00:23 | Jeffrey Zhao      
@Cat Chen
自己写一个也不错,其实就是把信息加密成一个字符串再解密出来,然后根据信息输出内嵌的数据,呵呵。
  回复  引用  查看    
#8楼  2007-02-08 00:34 | 臭石头      
好东西,有创意
  回复  引用  查看    
#9楼  2007-02-08 00:37 | Jeffrey Zhao      
对了,dojo是不是也是这样的?
  回复  引用  查看    
#10楼  2007-02-08 01:00 | 问题 [未注册用户]
一个问题,如果一个页面时被嵌套在master页中的,访问不了page head,怎么用你的程序呢?
  回复  引用    
#11楼  2007-02-08 08:37 | 高海东      
很好啊 js变得越来越重要了
  回复  引用  查看    
#12楼  2007-02-08 09:21 | 原上草      
demo代码不对啊,能重新上传一份吗?
  回复  引用  查看    
#13楼 [楼主] 2007-02-08 10:12 | 浪子      
@anbei
谢谢你告诉我CS里有相关方法,我会找时间去研究下
所谓协议,只是防君子不防小人,如果对你产生影响,那恭喜,你是个真君子......

  回复  引用  查看    
#14楼 [楼主] 2007-02-08 10:20 | 浪子      
@原上草
代码不对嘛?没关系,你找到SmartScript.dll,自己引用下就可以了。

你需要做的事情只是:
1、引用SmartScript.dll
2、配置WebConfig
3、增加Scripts文件夹
4、拷贝boot.js和Scripts.config进入Scripts文件夹
5、部署你自己的js进入Scripts文件夹
6、修改Scripts.config映射你自己的js文件
7、在你需要用的页面上

<script type="text/javascript" src="SmartScripts.axd?res=boot"></s cript>      
<scr ipt type="text/javascript">     
$using(
"yourjs1","yourjs2"); $load();     </script> 
done.

done.
  回复  引用  查看    
#15楼 [楼主] 2007-02-08 10:25 | 浪子      
@问题
这个方法不一定要用在Head里面,
你可以帮js搬到body里面也可以,它就是段普通的js,你以前怎么用,现在还是怎么用。

其实你有master更好,把对boot的引用放到master里面,content就可以直接调用$using了:)
  回复  引用  查看    
#16楼 [楼主] 2007-02-08 10:28 | 浪子      
@Cat Chen
用到后面,我总觉得嵌入js适合js非常稳固的时候,但是很多时候,我们的js都是在不同的变动当中的,所谓才有了想从文件读取的想法,更新比较方便:)
因为我现在一个平台里面同时跑了4,5插件子程序,以后可能还更多,js的管理越来越麻烦了。
  回复  引用  查看    
#17楼 [楼主] 2007-02-08 10:31 | 浪子      
@原上草
不好意思,指错路径了

这里才是http://www.cnblogs.com/Files/walkingboy/SmartScript.WebTest.rar

  回复  引用  查看    
#18楼  2007-02-08 10:39 | wang.seraph [未注册用户]
建一个Pagebase类,直接在里面用C#输出JS的路径
再在每个页面继承后
直接在head里render不行么
  回复  引用    
#19楼 [楼主] 2007-02-08 10:50 | 浪子      
@wang.seraph
当然可以。
只要记住其实这就是段普通的js,就可以了。
以前你怎么用js就还是怎么用,不会有任何的变化。
  回复  引用  查看    
#20楼  2007-02-08 10:52 | wang.seraph [未注册用户]
我现在就是这样做的

  回复  引用    
#21楼  2007-02-08 10:55 | Cat Chen      
@浪子
当你的项目还小的时候,js可以直接在Web项目中。当你的项目升级为一个解决方案,有很多控件库、组件库的时候,js就应该跟它所服务的控件,这时候就必须是嵌入的。

你的假设基于这个js就服务于这个Web项目。但解决方案或者服务于多个Web项目的控件库就不能这样,js必须是解耦的,与Web项目无依赖的。Web项目只需要知道它依赖哪个控件,而控件内部的逻辑将js资源调出来。
  回复  引用  查看    
#22楼 [楼主] 2007-02-08 11:02 | 浪子      
@Cat Chen
是的。控件的js就是我所表达的,比较稳固的js。
我这个主要是处理程序的js。因为现在大部分编程都在client完成,所以其实客户端的js,基本上每个页面都会有一个,这些是部分业务逻辑的js,不好编译在里面,比较麻烦,而且有时候改动还是比较大的,还有涉及到多语言处理。
所以考虑了载入机制,我甚至可以在SmartScript读取资源的时候进行语言的自动选择。
而且会引用其他的第三方类库,比如yui。


  回复  引用  查看    
#23楼  2007-02-12 10:40 | MS的明天 [未注册用户]
的确是不错了方法!
  回复  引用    
#24楼  2007-06-28 11:11 | vven [未注册用户]
不能管理依赖性,而且还要使用dll简直就是垃圾。JSI也比这种东东好,尽管JSI也不较烂,不象宣称的没有侵入性,如果用很多js库,配置也好烦。其实只要管理好依赖性,命名空间不做也没什么关系,有空我会做一个纯js的管理库依赖的工具。
  回复  引用    
#25楼 [楼主] 2007-06-28 15:22 | 浪子      
@vven
解决的问题不一样,我目前并不没有考虑解决依赖性问题,只是考虑js的引用和缓存的更新问题,虽说垃圾但是够用就足够了.

另外,并不是所有的纯(纯服务端,纯客户端?)都是最好的.

等你的依赖性解决方案,不要光说不练哦:).

  回复  引用  查看    
#26楼  2007-07-22 10:10 | jindw [未注册用户]
@vven
不知道vven所说的:JSI "不象宣称的没有侵入性"。指的是什么。
JSI是可以无侵入的集成,目前的一些集成示例,如:jquery, prototype,yui,fckeditor等,都可以不改动源代码。

当能,一旦你使用了JSI的一些高级一点的功能,比如,获取当前脚本的路径,那么,侵入是无法避免的。

  回复  引用    
#27楼  2007-08-23 09:33 | Icebird      
代码里面读取配置文件和JS后要记住关闭,不然那些文件会处于一直被打开状态
  回复  引用  查看    
#28楼 [楼主] 2007-08-23 09:34 | 浪子      
@Icebird
明白:)
  回复  引用  查看    
#29楼  2007-11-29 21:27 | jeff123 [未注册用户]
kinn.js
var browse = {
test : function(){
alert("测试");
}
}

怎么不能支持对象啊

<input type="button" onclick="browse .KINN();" value="KINN" />


  回复  引用    
#30楼  2007-11-29 21:52 | jeff123 [未注册用户]
发现可以调用,可是中文有时候会丢失?有时有显示这怎么回事呀
  回复  引用    
#31楼  2007-11-29 22:31 | jeff123 [未注册用户]
调试多次发现中文有问题
  回复  引用    
#32楼  2007-11-29 22:53 | jeff123 [未注册用户]
1.<script type="text/javascript" charset="gb2312"> 不行
2.默认utf8
js文件也为utf8
也不行

  回复  引用    
#33楼  2007-11-29 22:54 | jeff123 [未注册用户]
做为参数传输进去可以,但是在js内部写不行
  回复  引用    
#34楼 [楼主] 2007-11-30 10:05 | 浪子      
我这边测试过,中文可以。
如果你的不行,应该是跟编码有关:
首先,js必须以UTF8格式保存
其次,你的页面也必须是UTF8的格式,请在IE右键确认你的页面编码格式。

--引用--------------------------------------------------
jeff123: 调试多次发现中文有问题
--------------------------------------------------------

  回复  引用  查看    
#35楼 [楼主] 2007-11-30 10:08 | 浪子      
如果你的页面一定需要gb2312的格式,我当时没有考虑到这种情况,所以我今天做了一个修复。

你需要更改boot.js文件里面的js,指定 charset="UTF-8"

function $load(){
if(arguments[0] instanceof Array){
document.write('<script type="text/javascript" charset="UTF-8" src="SmartScripts.axd?res='+arguments[0].join("$")+'&ver='+__SS.Version+'"><' + '/script>');
}else if(__SS.Loads.length>0){
document.write('<script type="text/javascript" charset="UTF-8" src="SmartScripts.axd?res='+__SS.Loads.join("$")+'&ver='+__SS.Version+'"><' + '/script>');
__SS.Loads.length = 0;
}
};
  回复  引用  查看    
#36楼  2007-11-30 15:02 | jeff123 [未注册用户]
谢谢,解决了
  回复  引用    
#37楼  2007-11-30 18:25 | 召冠      
你的方法我试过了,在根目录下的页面是没有问题的,但是在其他子目录下就有脚本错误。我对JS不甚了解,只求能够满足需求。
你能告诉我该怎么解决吗?谢谢!!
  回复  引用  查看    
#38楼 [楼主] 2007-11-30 20:26 | 浪子      
请描述更详细的信息,否则我也不知道该如何入手.

--引用--------------------------------------------------
召冠: 你的方法我试过了,在根目录下的页面是没有问题的,但是在其他子目录下就有脚本错误。我对JS不甚了解,只求能够满足需求。
你能告诉我该怎么解决吗?谢谢!!
--------------------------------------------------------

  回复  引用  查看    
#39楼  2007-12-01 08:13 | jeff123 [未注册用户]
如何实现www.netvibes.com的add a page功能
类似:www.live.com的add a page功能
并且page标签页可以拖动,位置都可变

新建一个页面并拖动新建页的标签如何实现-注意不是模块拖动,是NewPageTab拖动 在行上 www.netvibes.com<div id="divTabs"><span></span><a href="javascript:void(NewPageTab())" id="aNewTab">new tab</a></div>新建一个页面,并且可以拖动新建页的标签如何实现(注意不是模块拖动,是NewPageTab拖动 在同行上,不是象模块排序是在列上)


  回复  引用    
#40楼  2007-12-01 08:57 | jeff123 [未注册用户]
<head>
</script>
<script>
var srcCol=null;
var tarCol=null;
function resetMove(){
srcCol=null;
tarCol=null;
}
function setMoveItem(srcObj){
srcCol=srcObj;
}
function moveItem(){
if(srcCol!=null){
document.all.Moving.style.display="";
document.all.Moving.style.pixelLeft=event.clientX+document.body.scrollLeft;
document.all.Moving.style.pixelTop=event.clientY+document.body.scrollTop+10;
if(event.srcElement.type=="barItem"&&event.srcElement.col!=srcCol.col){
tarCol=event.srcElement;
document.all.Moving.innerText=srcCol.text+"\r\n移动到:"+tarCol.text;
}else{
tarCol=null;
document.all.Moving.innerText=srcCol.text;
}
}
}
function endMove(){
if(srcCol!=null&&tarCol!=null){
var temtext = tarCol.text;
tarCol.text = srcCol.text;
srcCol.text = temtext;
var temhtml = tarCol.innerHTML;
tarCol.innerHTML = srcCol.innerHTML;
srcCol.innerHTML = temhtml;
}else if(srcCol!=null&&event.srcElement.type=="barItem"&&event.srcElement.col==srcCol.col){
// do nothing
}
resetMove();
document.all.Moving.style.display="none";
}
function resetMoveItem(){
if(event.srcElement.type!="barItem"){
resetMove();
}else{
setMoveItem(event.srcElement)
}
}
</script>
<style type='text/css'>
.MoveItem{color:#FFFF43;cursor:hand;font-size: 12px;}
.MoveItemHover{ font-size: 12px; color: #FFcc00;cursor:hand}
.MoveItem2 { font-size: 12px; color: #003399;cursor:hand;}
.MoveItemHover2 { font-size: 12px; color: #0066cc;cursor:hand;}
</style>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onmousedown="resetMoveItem();" onmouseup="endMove()" onmousemove="moveItem()" onselectstart="return(false)">
<span id="Moving" style="position:absolute;display:none;height:20;border: 1 solid #CCCCCC;color:green;font-size:10pt;background:#FFFFFF"></span>
<TABLE width="760" border=0 align="center" cellPadding=0 cellSpacing=0>
<TR>
<TD> <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=middle bgColor="#800080" nowrap id="bar1" height='18'>&nbsp;&nbsp;
<span class='MoveItem' type='barItem' col='chrItem0' text='网站首页' onmouseover='this.className="MoveItemHover"' onmouseout='this.className="MoveItem"' title='按下Mouse左键拖动交换地置'>网站首页</span>&nbsp;
<span class='MoveItem' type='barItem' col='chrItem1' text='主栏目一' onmouseover='this.className="MoveItemHover"' onmouseout='this.className="MoveItem"' title='按下Mouse左键拖动交换地置'>主栏目一</span>&nbsp;
<span class='MoveItem' type='barItem' col='chrItem2' text='主栏目二' onmouseover='this.className="MoveItemHover"' onmouseout='this.className="MoveItem"' title='按下Mouse左键拖动交换地置'>主栏目二</span>&nbsp;
<span class='MoveItem' type='barItem' col='chrItem3' text='主栏目三' onmouseover='this.className="MoveItemHover"' onmouseout='this.className="MoveItem"' title='按下Mouse左键拖动交换地置'>主栏目三</span>&nbsp;
<span class='MoveItem' type='barItem' col='chrItem4' text='主栏目四' onmouseover='this.className="MoveItemHover"' onmouseout='this.className="MoveItem"' title='按下Mouse左键拖动交换地置'>主栏目四</span>&nbsp;
<span class='MoveItem' type='barItem' col='chrItem5' text='主栏目五' onmouseover='this.className="MoveItemHover"' onmouseout='this.className="MoveItem"' title='按下Mouse左键拖动交换地置'>主栏目五</span>&nbsp;
<span class='MoveItem' type='barItem' col='chrItem6' text='主栏目六' onmouseover='this.className="MoveItemHover"' onmouseout='this.className="MoveItem"' title='按下Mouse左键拖动交换地置'>主栏目六</span>&nbsp;
<span class='MoveItem' type='barItem' col='chrItem7' text='主栏目七' onmouseover='this.className="MoveItemHover"' onmouseout='this.className="MoveItem"' title='按下Mouse左键拖动交换地置'>主栏目七</span>&nbsp;
<span class='MoveItem' type='barItem' col='chrItem8' text='主栏目八' onmouseover='this.className="MoveItemHover"' onmouseout='this.className="MoveItem"' title='按下Mouse左键拖动交换地置'>主栏目八</span>&nbsp;
<span class='MoveItem' type='barItem' col='chrItem9' text='主栏目九' onmouseover='this.className="MoveItemHover"' onmouseout='this.className="MoveItem"' title='按下Mouse左键拖动交换地置'>主栏目九</span>&nbsp;
<span class='MoveItem' type='barItem' col='chrItem10' text='主栏目十' onmouseover='this.className="MoveItemHover"' onmouseout='this.className="MoveItem"' title='按下Mouse左键拖动交换地置'>主栏目十</span>&nbsp;
</TD>
</TR>
</TBODY>
</TABLE></TD>
</TR>
</TABLE>
</body>
</html>

  回复  引用    
#41楼  2007-12-01 09:13 | jeff123 [未注册用户]
上面是交换,现在需要的效果是 www.netvibes.com 那样

如:拉 主栏目八 到 网站首页 前 顺序变成: 主栏目八 网站首页
拉 主栏目八 到 网站首页 后 顺序变成: 网站首页 主栏目八

考虑过在栏目间放一个字符如:”|“ add page 时 如:|网站首页| 在最后一个 | 加 |主栏目20 顺序变成: |网站首页|主栏目20|

栏目需动态(把栏目看成Item对象),并且栏目具有一定属性 如:图标,可编辑等 实现不理想有较多bug, 求具体实现


  回复  引用    
#42楼 [楼主] 2007-12-01 09:50 | 浪子      
去查看现有的很多js类库的UI扩展,你就可以发现可以实现类似功能了,比如yui,ext,jquery.

还有一种方法,就去你挖现有有此功能的网站(比如你说的两个站点)的js出来就可以了。

--引用--------------------------------------------------
jeff123 : 上面是交换,现在需要的效果是 www.netvibes.com 那样

如:拉 主栏目八 到 网站首页 前 顺序变成: 主栏目八 网站首页
拉 主栏目八 到 网站首页 后 顺序变成: 网站首页 主栏目八

考虑过在栏目间放一个字符如:”|“ add page 时 如:|网站首页| 在最后一个 | 加 |主栏目20 顺序变成: |网站首页|主栏目20|

栏目需动态(把栏目看成Item对象),并且栏目具有一定属性 如:图标,可编辑等 实现不理想有较多bug, 求具体实现


--------------------------------------------------------

  回复  引用  查看    
#43楼  2007-12-01 14:02 | jeff123 [未注册用户]
js挖出来过 过于复杂7w行代码,提取存在难度,js你很熟,如果方便帮忙看看,谢谢
  回复  引用    
#44楼 [楼主] 2007-12-01 14:24 | 浪子      
^_^这就有点难了,7w多行哦,不好意思哦.

你可以去看那些现在的类库的扩展,去相关社区看看吧.

--引用--------------------------------------------------
jeff123 : js挖出来过 过于复杂7w行代码,提取存在难度,js你很熟,如果方便帮忙看看,谢谢
--------------------------------------------------------

  回复  引用  查看    
#45楼  2007-12-01 14:48 | jeff123 [未注册用户]
哈哈,找了好多地方,51,蓝色理想,等....居然都没找到相关的
  回复  引用    
#46楼 [楼主] 2007-12-03 08:59 | 浪子      
不一定都在国内社区找,而且51,blueidea都是综合社区,自然比较难找到这个东西了。

你要去找的社区应该是那些成熟类库的扩展(比如jquery,yui,prototype等)

--引用--------------------------------------------------
jeff123 : 哈哈,找了好多地方,51,蓝色理想,等....居然都没找到相关的
--------------------------------------------------------

  回复  引用  查看    
#47楼  2007-12-03 12:27 | 召冠      
@浪子
将Demo中的SmartScript.aspx移入随便一个文件夹中(而不是在根目录下),就会有脚本错误!

  回复  引用  查看    
#48楼 [楼主] 2007-12-03 13:05 | 浪子      
我不是很明白你的意思,Demo中的SmartScript.aspx,我似乎没有这个文件?

请再次确认SmartScript所要解决的问题和使用范围。

--引用--------------------------------------------------
召冠: @浪子
将Demo中的SmartScript.aspx移入随便一个文件夹中(而不是在根目录下),就会有脚本错误!

--------------------------------------------------------

  回复  引用  查看    
#49楼  2007-12-03 15:07 | 召冠      
@浪子
不好意思,就是Default.aspx页面。
我自己试验的时候,取得是SmartScript.aspx
  回复  引用  查看    
#50楼 [楼主] 2007-12-03 17:40 | 浪子      
明白了,请下载CodePlex上面的版本,本页的demo下载属于比较旧,放入子文夹,计算Scripts.config的路径的时候出错。

--引用--------------------------------------------------
召冠: @浪子
不好意思,就是Default.aspx页面。
我自己试验的时候,取得是SmartScript.aspx
--------------------------------------------------------

  回复  引用  查看    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-06-10 13:28 编辑过


相关链接: