我現在有一個部分工作的解決方案。
我遵循伊恩的建議,並瀏覽了工具包源代碼。在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