Spiga
Posts - 155, Articles - 13, Comments - 2333
Cnblogs
Dashboard
Login
Home
Contact
Gallery
RSS
Cat in dotNET
继承自Control的简单Template
2006-11-01 15:31 by Cat Chen, 434 visits,
网摘
,
收藏
,
编辑
//
Cattism.GCamp.Template
Cattism.GCamp.UI.Template
=
function
Cattism$GCamp$UI$Template(element)
{
var
e
=
Function._validateParams(arguments, [
{name:
"
element
"
, type: Sys.UI.DomElement}
]);
if
(e)
throw
e;
Cattism.GCamp.UI.Template.initializeBase(
this
, [element]);
}
Cattism.GCamp.UI.Template.prototype.createInstance
=
function
Cattism$GCamp$UI$Template$createInstance()
{
var
result
=
new
Sys.Preview.UI.TemplateInstance();
result.instanceElement
=
this
._element.cloneNode(
true
);
return
result;
}
Cattism.GCamp.UI.Template.registerClass(
"
Cattism.GCamp.UI.Template
"
, Sys.UI.Control, Sys.Preview.UI.ITemplate);
0
0
0
(请您对文章做出评价)
«
上一篇:
深入理解 ASP.NET 动态控件 (Part 1 - 感性认识)
»
下一篇:
Microsoft Ajax Beta1 - 边学边用边补充 (Part 3 - ITemplate)
Categories:
JavaScript
Add your comment
18 条回复
574184
#1楼
网鱼[匿名][未注册用户]
2006-11-20 16:41
请问您的这段代码怎么用啊,我把这段代码放到我的页面上提示Cattism未定义.
这是怎么回事啊.我是把您的"使用$create的DragDropList与DraggableItem声明"里的代码放在这段代码后面用的。
能不能给段完整的代码让我们可以参考一下.多谢了。
回复
引用
#2楼
[
楼主
]
Cat Chen
2006-11-20 19:20
@网鱼[匿名]
是这样的,Cattism.GCamp.UI是我自定义的namespace,如果你自己用的话请替换成你的项目的namespace,如果你不需要namespace可以直接把它去掉。
注册namespace的方法为Type.registerNamespace,例如Type.registerNamespace("Cattism.GCamp.UI")。
回复
引用
查看
#3楼
网鱼[匿名][未注册用户]
2006-11-21 11:08
我按您的提示,把代码里的Cattism.GCamp.UI都去掉了,原来的错误没有了,不过又来了一个新的错误,我的JS功底确实不怎么样.还请您在指教一下.代码如下.
<script language="jscript">
function App_Init()
{
Template = function Template(element)
{
var e = Function._validateParams(arguments, [
{name: "element", type: Sys.UI.DomElement}
]);
if (e) throw e;
Template.initializeBase(this, [element]);
}
Template.prototype.createInstance = function Template$createInstance()
{
var result = new Sys.Preview.UI.TemplateInstance();
result.instanceElement = this._element.cloneNode(true);
return result;
}
Template.registerClass("Template", Sys.UI.Control, Sys.Preview.UI.ITemplate);
Template = function Template(element)
{
var e = Function._validateParams(arguments, [
{name: "element", type: Sys.UI.DomElement}
]);
if (e) throw e;
Template.initializeBase(this, [element]);
}
Template.prototype.createInstance = function Template$createInstance()
{
var result = new Sys.Preview.UI.TemplateInstance();
result.instanceElement = this._element.cloneNode(true);
return result;
}
Template.registerClass("Template", Sys.UI.Control, Sys.Preview.UI.ITemplate);
var dropCueTemplate = $create(Template, {}, {}, {}, $get("dropCueTemplate"));
var emptyTemplate = $create(Template, {}, {}, {}, $get("emptyTemplate"));
var c_1_div$DragDropZoneBehavior = $create(dragDropList,
{
dragDataType: "HTML",
acceptedDataTypes: ["HTML"],
dragMode: Sys.Preview.UI.DragMode.Move,
direction: Sys.Preview.UI.RepeatDirection.Vertical,
dropCueTemplate: dropCueTemplate,
emptyTemplate: emptyTemplate
}, {}, {}, $get("c_1_div"));
var c_2_div$DragDropZoneBehavior = $create(dragDropList,
{
dragDataType: "HTML",
acceptedDataTypes: ["HTML"],
dragMode: Sys.Preview.UI.DragMode.Move,
direction: Sys.Preview.UI.RepeatDirection.Vertical,
dropCueTemplate: dropCueTemplate,
emptyTemplate: emptyTemplate
}, {}, {}, $get("c_2_div"));
var memberPart$DraggableItemBehavior = $create(Sys.Preview.UI.DraggableListItem,
{
handle: $get("m_30_h")
}, {}, {}, $get("m_30"));
var memberPart$DraggableItemBehavior = $create(Sys.Preview.UI.DraggableListItem,
{
handle: $get("m_31_h")
}, {}, {}, $get("m_31"));
</script>
现在我的IE是
行: 667
字符:5
错误:Sys.ArgumentException:Value is not the name of an existing type.
Parameter name : typeName
代码:0
不知道var c_1_div$DragDropZoneBehavior = $create(dragDropList...
这句话是不是需要写成var c_1_div$DragDropZoneBehavior = $create(Sys.Preview.UI.dragDropList...
回复
引用
#4楼
[
楼主
]
Cat Chen
2006-11-21 12:00
@网鱼[匿名]
上面给出的Template代码不是直接放在App_Init中使用的,就好像你用C#声明一个类时把代码放到一个独立的cs文件中,你需要把Template的声明放到独立的js中然后引用,接着你就能使用$create来创建Template了。
这和你在cs中声明一个继承自Control的类,然后在aspx中使用有点类似。
回复
引用
查看
#5楼
网鱼[匿名][未注册用户]
2006-11-21 16:16
刚刚看了一下些命名空间的文章,大概知道了怎么回事了,
我也把Template的代码拿出去放到一个单独的JS文件里了。
Template的问题解决,没有报错,但是在
var c_2_div$DragDropZoneBehavior = $create(dragDropList,
{ ...
的时候报错,说dragDropList未定义,你的代码中Cattism.GCamp.UI.这个命名空间是不是继承了什么方法.
如果我不用命名空间的话该怎么定义dragDropList呢,用命名空间的话又该如何定义呢?
最后谢谢Cat Chen 能在工作时间回答我提问.看来我的项目又有希望了。
回复
引用
#6楼
网鱼[匿名][未注册用户]
2006-11-21 16:22
我在dragDropList前面加入Sys.Preview.UI.结果报Sys.ArgumentUndefindeException:Value connot be Undefinde.
Parameter name : type
看起来 dragDropList 好象是在 Sys.Preview.UI.下的,但是是不是我参数传的有问题啊?
回复
引用
#7楼
[
楼主
]
Cat Chen
2006-11-21 16:26
@网鱼[匿名]
在用$create时必须用完整的写法,也就是Sys.Preview.UI.DragDropList。
回复
引用
查看
#8楼
[
楼主
]
Cat Chen
2006-11-21 16:29
@网鱼[匿名]
至于我继承自DragDropList的那个修改版本你可以参考这里:
http://www.cnblogs.com/cathsfz/archive/2006/10/27/541387.aspx
回复
引用
查看
#9楼
网鱼[匿名][未注册用户]
2006-11-22 10:48
耶~!成功了。非常感谢Cat Chen。
接下来研究对自动生成的div自动生成拖动声明。
如果碰到问题还请Cat Chen再次指教。
回复
引用
#10楼
[
楼主
]
Cat Chen
2006-11-22 11:24
@网鱼[匿名]
好的,没问题。
回复
引用
查看
#11楼
网鱼[匿名][未注册用户]
2006-11-22 17:15
Cat Chen 不好意思,我又碰到了一个问题。不知道你是怎么解决的。问题如下:
var c_1_div$DragDropZoneBehavior = $create(MyDragDropList,
{
dragDataType: "HTML",
acceptedDataTypes: ["HTML"],
dragMode: Sys.Preview.UI.DragMode.Move,
direction: Sys.Preview.UI.RepeatDirection.Vertical,
dropCueTemplate: dropCueTemplate,
emptyTemplate: emptyTemplate
}, {}, {}, $get("c_1"));
当$get("c_1"))里的C_1为DIV控件时,拖动的层要放到这个c_1里定位很困难(c_1里面为空),也就是说c_1为空的时候他的高度很小,想要把拖动的层放到里面需要定位到c_1这个DIV里面很困难。c_1的高度需要里面有东西才能撑大。而如果把c_1换成是一个<td></td>的时候虽然高度可以固定作用域很大,但是dropCueTemplate: dropCueTemplate显示的虚线框会变形,变得很小。
不知道Cat Chen您是怎么处理这个问题的?
回复
引用
#12楼
[
楼主
]
Cat Chen
2006-11-22 18:29
这通过设置emptyTemplate解决,你可以为emptyTemplate设置height属性。
回复
引用
查看
#13楼
网鱼[匿名][未注册用户]
2006-11-23 14:48
您说的方法不太好用啊.比如说我们的页面上现在只有3列 $get("c_1"),
但是只有1列 $get("c_1")有个DIV其他的两个 $get("c_1")都没有DIV也就是为空,在页面刚打开的时候emptyTemplate是不会在空的$get("c_1")里面出现的。只有拖动以后$get("c_1")为空了,emptyTemplate才会在$get("c_1")里面出现.当然除非可以控制emptyTemplate在页面打开的时候
对空的$get("c_1")进行填充.我也有试过,但是失败了,不知道Cat Chen 您是否有更好的方法
回复
引用
#14楼
[
楼主
]
Cat Chen
2006-11-23 16:17
@网鱼[匿名]
如果你有一个div用作DragDropList,并且一开始就为空,那么你一开始就在用emptyTemplate.createInstance创建一个emptyTemplate节点的实体,然后把它添加为该div的子元素。
回复
引用
查看
#15楼
网鱼[匿名][未注册用户]
2006-11-24 11:01
不好意思,我写出来以后会报错,可能写法有问题,您可以给一个完整点的写法吗?
我是这么写的:
$get("c_"+i+"_div").appendChild(emptyTemplate.createInstance);
回复
引用
#16楼
[
楼主
]
Cat Chen
2006-11-25 22:16
@网鱼[匿名]
首先确认你已经执行了emptyTemplate = $create(...)的操作初始化,然后:
$get("c_"+i+"_div").appendChild(emptyTemplate.createInstance());
别忘记了createInstance后面的(),这样才是指函数执行结果,否则就是指函数。你尝试将一个函数添加到DOM上面去当然不行。
回复
引用
查看
#17楼
网鱼[匿名][未注册用户]
2006-11-27 14:24
还是有问题啊Cat老大.好象appendChild接口不能用啊。
我这么写的:
var d=document.createElement("div");
d.id="m_"+UrlID;
d.className="modbox";
d.innerHTML=m_DivContert;
$get("c_1_div").appendChild(d);
alert(d);
var tempEmptyDiv=emptyTemplate.createInstance();
alert(tempEmptyDiv);
if(tempEmptyDiv)
{
$get("c_2_div").appendChild(tempEmptyDiv);
}
第一个alert(d)弹出[object],第二个alert(tempEmptyDiv)弹出为[object Object]第一个appendChild能成功,第二个就会报错,错误内容为htmlfile: 不支持此接口...
先前emptyTemplate = $create(...)已经执行过了。
不知道还有没有别的方法可以实现.
回复
引用
#18楼
[
楼主
]
Cat Chen
2006-11-27 18:07
@网鱼[匿名]
不好意思,又犯低级错误了,应该是emptyTemplate.createInstance().instanceElement。
回复
引用
查看
注册用户登录后才能发表评论,请
登录
或
注册
。
IT新闻
:
·
美调查公司称苹果iPad配件成本最低219美元
·
摩尔庄园:儿童生意密码
·
Facebook与美国在线合作 整合AIM动态功能
·
NDepend 3.0已与Visual Studio集成
·
Ruby in Steel 1.5发布,去除IronRuby支持
每天10分钟,轻松学英语
专题:
iPad
jQuery
Windows 7
网站导航:
博客园首页
IT新闻
个人主页
闪存
程序员招聘
社区
博问
网摘
China-pub 计算机图书网上专卖店!6.5万品种2-8折!
China-Pub 计算机绝版图书按需印刷服务
相关搜索:
JavaScript
在知识库中查看:
继承自Control的简单Template
About
我的链接
我的标识
我的简历与作品
Cat in Chinese
Cat in English
Cat on Web Tech
订阅
版权许可
This work is licensed under a
Creative Commons License
.
我的主页
个人资料
我的闪存
发短消息
随笔分类
Rss
*Book Recommendation*(1)
Rss
*Comprehensive Understanding*(9)
Rss
*Most Practical*(9)
Rss
*Netcasts*(2)
Rss
*Random Clippings*(10)
Rss
*Resources*(4)
Rss
.NET Framework(14)
Rss
AJAX(45)
Rss
ASP.NET(68)
Rss
ASP.NET AJAX(24)
Rss
ASP.NET Futures(8)
Rss
C#(7)
Rss
CSS(14)
Rss
iPhone(8)
Rss
JavaScript(44)
Rss
LINQ(1)
Rss
Linq to Sql(2)
Rss
Linq to Xml(1)
Rss
Mac(1)
Rss
Rails(4)
Rss
Ruby(4)
Rss
Silverlight(7)
Rss
SQL(4)
Rss
Web(108)
Rss
WF(1)
Rss
Windows(1)
Rss
WPF(1)
Rss
XNA(1)
随笔档案
2010年2月(3)
2010年1月(1)
2009年12月(4)
2009年11月(5)
2009年10月(3)
2009年9月(1)
2009年8月(2)
2009年7月(3)
2009年6月(4)
2009年5月(4)
2009年4月(1)
2009年3月(2)
更多...
2008年12月(3)
2008年11月(2)
2008年10月(2)
2008年9月(2)
2008年4月(2)
2008年3月(5)
2008年2月(1)
2008年1月(7)
2007年12月(6)
2007年11月(4)
2007年10月(4)
2007年9月(1)
2007年8月(2)
2007年7月(3)
2007年6月(4)
2007年5月(4)
2007年4月(1)
2007年3月(5)
2007年2月(7)
2007年1月(3)
2006年12月(13)
2006年11月(11)
2006年10月(30)
我管理的小组
iPhone / iPad 开发
团队博客
.NET 控件与组件开发(0/0)
北京.NET俱乐部(0/0)
应届毕业生之家(0/0)
广州.NET俱乐部(0/0)
Ajax&Atlas技术团队(0/0)
ASP.NET AJAX (Atlas)学习(0/0)
.NetFramework3.0 & 3.5(WCF,WPF,WF)团队(0/0)
MVP(微软最有价值专家)团队(0/0)
Silverlight学习与研究(0/0)
Windows Vista开发(0/0)
数据库团队(0/0)
.net企业应用开发(0/0)
MVP播客(0/0)
asp.net开发团队(0/0)
RIA技术联盟(0/0)
60天内阅读排行
程序员的品味(3646)
程序之外的事情 (Part 1 - Speech)(2980)
《程序员羊皮卷》书评(2746)
看对的书 (Part 0 - 何谓对错)(2240)
China MVP Open Day 2009(2105)
能承载移动 Web 应用的唯一浏览器: Mobile Safari(1834)
Apple 谈论产品 vs Microsoft 谈论技术(1548)
欢迎加入 iPhone / iPad 开发小组(1527)
阅读排行榜
根本不存在 DIV + CSS 布局这回事(29866)
欲练 CSS ,必先宫 IE(14420)
你有 <table /> 强迫症吗?(9648)
IIS7 会重用那些不该重用 HttpHandler(9041)
Code is Configuration(8966)
英语阅读推荐:基于AJAX的ASP.NET聊天室 & 如何建立共识(8586)
什么样的 Code 更像是 Configuration(8321)
英语阅读推荐:美化文件上传框 & 无刷新文件上传(8055)
英语阅读推荐:使用AJAX+WF+LINQ制作Google IG式首页(7599)
十分钟内学会:将HTML格式化为合法的XML(7591)
我的链接
Rss
Cat in Chinese
Rss
Cat in English
我的标识
我的简历与作品