0

有没有一种更简单的方法可以在 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 = "(+)";   
    };
});
4

3 回答 3

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
于 2013-04-24T19:59:15.440 回答
0

您可以使用使用dojo/_base/fx.fadeOutdojo/_base/fx.fadeIn的 dojo/ fx /Toggler

于 2013-04-24T21:53:09.093 回答
0

实际上,我决定将其作为一个普通的旧 javascript 函数来执行,我可以在其他地方重用它,包括可能不需要 dojo 的页面。像这样的东西:

<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>
于 2013-04-25T20:51:47.223 回答