2013-04-24 51 views
0

有沒有更簡單的方法在dojo中寫這樣的東西(而不是爲每個我想顯示或隱藏的東西都有一個函數)?我知道必須有辦法避免這種重複,但我不知道如何去做。Dojo - 不要重複自己

on(dom.byId("thing_toggle2"), "click", function(){ 
    if(thing_list2.style.display == "none") { 
     thing_list2.style.display = "block"; 
     dom.byId("toggle2_sign").innerHTML = "(-)"; 
    } else { 
     thing_list2.style.display = "none"; 
     dom.byId("toggle2_sign").innerHTML = "(+)"; 
    }; 
}); 

on(dom.byId("thing_toggle3"), "click", function(){ 
    if(thing_list3.style.display == "none") { 
     thing_list3.style.display = "block"; 
     dom.byId("toggle3_sign").innerHTML = "(-)"; 
    } else { 
     thing_list3.style.display = "none"; 
     dom.byId("toggle3_sign").innerHTML = "(+)"; 
    }; 
}); 

回答

0

其實我決定做這個作爲一個普通的老JavaScript函數,我可以在其他地方重複使用,包括可能不需要道場頁。這樣的事情:

<a href="#" onclick="javascript:showlayer('myName');return false;">[1]</a> 
<a href="#" onclick="javascript:showlayer('anothername');return false;">[2]</a> 

<div id="myName" style="display:none;">Antonio</div> 
<div id="anothername" style="display:none;">Elliot</div> 

<script type="text/javascript"> 
function showlayer(layer){ 
var myLayer = document.getElementById(layer).style.display; 
if(myLayer=="none"){ 
    document.getElementById(layer).style.display="block"; 
    } else { 
    document.getElementById(layer).style.display="none"; 
}; 

} 
</script> 
0

我沒有測試這個,但它應該給你一個出發點。添加額外的部分,只需要添加到數據數組中。

var fnToggle = function(nodeMap) { 
    var expand = domStyle.get(dom.byId(nodeMap.contentNode), 'display') == 'none'; 
    domStyle.set(dom.byId(nodeMap.contentNode), 'display', expand ? 'block' : ''); 
    html.set(dom.byId(nodeMap.expandoNode), expand ? '+' : '-'); 
}; 

var nodes = [ 
    { eventNode: 'thing_toggle2', contentNode: thing_list2, expandoNode: 'toggle2_sign' }, 
    { eventNode: 'thing_toggle3', contentNode: thing_list3, expandoNode: 'toggle3_sign' } 
]; 

array.forEach(nodes, function(nodeMap) { 
    on(dom.byId(nodeMap.eventNode), "click", function(){ fnToggle(nodeMap); }); 
}); 

// domStyle -> dojo/dom-style 
// html  -> dojo/html 
// array -> dojo/_base/array 
+0

看起來不錯,我會設置「無」作爲第二個選項來顯示'expand? 'block':'none''並翻轉+/-運算符,雖然'擴大? ' - ':'+'' – 2013-04-25 10:51:10