Feedback
请问您的这段代码怎么用啊,我把这段代码放到我的页面上提示Cattism未定义.
这是怎么回事啊.我是把您的"使用$create的DragDropList与DraggableItem声明"里的代码放在这段代码后面用的。
能不能给段完整的代码让我们可以参考一下.多谢了。
@网鱼[匿名]
是这样的,Cattism.GCamp.UI是我自定义的namespace,如果你自己用的话请替换成你的项目的namespace,如果你不需要namespace可以直接把它去掉。
注册namespace的方法为Type.registerNamespace,例如Type.registerNamespace("Cattism.GCamp.UI")。
我按您的提示,把代码里的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...
@网鱼[匿名]
上面给出的Template代码不是直接放在App_Init中使用的,就好像你用C#声明一个类时把代码放到一个独立的cs文件中,你需要把Template的声明放到独立的js中然后引用,接着你就能使用$create来创建Template了。
这和你在cs中声明一个继承自Control的类,然后在aspx中使用有点类似。
刚刚看了一下些命名空间的文章,大概知道了怎么回事了,
我也把Template的代码拿出去放到一个单独的JS文件里了。
Template的问题解决,没有报错,但是在
var c_2_div$DragDropZoneBehavior = $create(dragDropList,
{ ...
的时候报错,说dragDropList未定义,你的代码中Cattism.GCamp.UI.这个命名空间是不是继承了什么方法.
如果我不用命名空间的话该怎么定义dragDropList呢,用命名空间的话又该如何定义呢?
最后谢谢Cat Chen 能在工作时间回答我提问.看来我的项目又有希望了。
我在dragDropList前面加入Sys.Preview.UI.结果报Sys.ArgumentUndefindeException:Value connot be Undefinde.
Parameter name : type
看起来 dragDropList 好象是在 Sys.Preview.UI.下的,但是是不是我参数传的有问题啊?
@网鱼[匿名]
在用$create时必须用完整的写法,也就是Sys.Preview.UI.DragDropList。
耶~!成功了。非常感谢Cat Chen。
接下来研究对自动生成的div自动生成拖动声明。
如果碰到问题还请Cat Chen再次指教。
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您是怎么处理这个问题的?
这通过设置emptyTemplate解决,你可以为emptyTemplate设置height属性。
您说的方法不太好用啊.比如说我们的页面上现在只有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 您是否有更好的方法
@网鱼[匿名]
如果你有一个div用作DragDropList,并且一开始就为空,那么你一开始就在用emptyTemplate.createInstance创建一个emptyTemplate节点的实体,然后把它添加为该div的子元素。
不好意思,我写出来以后会报错,可能写法有问题,您可以给一个完整点的写法吗?
我是这么写的:
$get("c_"+i+"_div").appendChild(emptyTemplate.createInstance);
@网鱼[匿名]
首先确认你已经执行了emptyTemplate = $create(...)的操作初始化,然后:
$get("c_"+i+"_div").appendChild(emptyTemplate.createInstance());
别忘记了createInstance后面的(),这样才是指函数执行结果,否则就是指函数。你尝试将一个函数添加到DOM上面去当然不行。
还是有问题啊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(...)已经执行过了。
不知道还有没有别的方法可以实现.
@网鱼[匿名]
不好意思,又犯低级错误了,应该是emptyTemplate.createInstance().instanceElement。