我现在有一个部分工作的解决方案。
我遵循伊恩的建议,并浏览了工具包源代码。在CollapsiblePanelBehavior.debug.js
中,你可以认为expandPanel()
显然是作为行为的公共接口的一部分。还有一个get_Collapsed()
。在javascript中访问这些行为的关键似乎是在ASP.NET中的CollapsiblePanelExtender
标签上设置BehaviorID
属性。
我修改了中继我的网页上,以便BehaviorID
s为predictible,沿着这些线路:
<ajaxToolkit:CollapsiblePanelExtender
BehaviorID="<%#'collapsebehavior'+DataBinder.Eval(Container.DataItem,'id')%>"
ID="CollapsiblePanelExtender" runat="server" />
这导致名为collapsebehavior1
,collapsebehavior2
,collapsebehavior3
等行为..
有了这个完成后,我可以按如下方式展开客户端上的所有可折叠面板:
function expandAll() {
var i = 0;
while (true) {
i++;
var name = 'collapsebehavior' + i;
var theBehavior = $find(name);
if (theBehavior) {
var isCollapsed = theBehavior.get_Collapsed();
if (isCollapsed) {
theBehavior.expandPanel();
}
} else {
// No more more panels to examine
break;
}
}
}
我确定在这样的循环中使用$find
效率非常低,但这就是我迄今为止的结果。
此外,由于某些原因,它不适用于Firefox。 (在FF上,只有第一个元素展开,然后在Control Toolkit代码中出现Javascript错误。)
这对所有JavaScript javascript专业人员来说都显得非常难看。也许我以后会清理一些东西,或者你可以帮我解决问题。
如果它原本是用javascript来完成的话,那一定是可以的。不过,我不想通过源代码翻找,所以也许发布有问题的函数? – 2009-06-30 20:46:20