2011-06-30 127 views
1

有人可以向我解释这段代码的用途吗?javascript代码说明

dojo[(show ? "remove" : "add") + "Class"](this.listNode, "tweetviewHidden"); 

下面是此函数值所属的功能:

// Provide the class 
dojo.provide("tweetview._ViewMixin"); 
  
// Declare the class 
dojo.declare("tweetview._ViewMixin", null, { 
    // Returns this pane's list 
    getListNode: function() { 
        return this.getElements("tweetviewList",this.domNode)[0]; 
    }, 
    // Updates the list widget's state 
    showListNode: function(show) { 
        dojo[(show ? "remove" : "add") + "Class"](this.listNode, "tweetviewHidden"); 
    }, 
    // Pushes data into a template - primitive 
    substitute: function(template,obj) { 
        return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g, function(match,key){ 
            return obj[key]; 
        }); 
    }, 
    // Get elements by CSS class name 
    getElements: function(cssClass,rootNode) { 
        return (rootNode || dojo.body()).getElementsByClassName(cssClass); 
    } 
}); 

来源:http://dojotoolkit.org/documentation/tutorials/1.6/mobile/tweetview/starting_tweetview

回答

2

很简单,如果显示是真的,它会调用dojo.removeClass(this.listNode, "tweetviewHidden");,如果它的错误,它会调用dojo.addClass(this.listNode, "tweetviewHidden");。 本质上是一个切换功能。

[]方括号用于打开一个对象以通过键访问值。就像var bla={"foo":"bar"}; bla["foo"];一样。现在,由于其道场,该值是一个函数,该函数将被执行

+2

我不明白为什么这个答案得到了否决票。人们可以争辩说,如果'show'是真的,那么不是很多,但是如果'show'是一个真值(即非0,“”,false,null,undefined或NaN),那么它就更多了,但这是一个小小的挑剔。 –

+0

谢谢您再次提出我的答案。 +1为您提供有关真实价值的信息!但是假,“”,null,undefined,0和NaN当然是错误的而不是真正的值!猜猜你把它混合起来:)和-10,20,真,“foobar”,一个对象,一个数组,函数是真正的值。 – japrescott

+0

我开始使用“不”来表示我的列表,以暗示我的意思是除我列出的那些以外的任何价值。我会争辩说,我没有把它混在一起,我的'不'就是错过了。 :) –

1

稍微更冗长的代码确实是这样的:

if (show) { f = dojo["removeClass"]; } 
else  { f = dojo["addClass"]; } 

f(this.listNode, "tweetviewHidden"); 

我认为dojo作为功能的容器可以通过[]按姓名查找。

+2

通过支架语法查询的性能是不是道场,这只是JS。 –

1

它使用[]支架和?:三元运算符,做这样的事情:

if(show){ 
    dojo.removeClass(this.listNode, "tweetviewHidden"); 
}else{ 
    dojo.addClass(this.listNode, "tweetviewHidden"); 
} 
0

据“切换”之类的通过“show”变量。也就是说,如果“show”是真的,那么该类将从节点中移除,否则它将被添加到节点。

考虑使用以下快捷键:

dojo.toggleClass(this.listNode, "tweetviewHidden", !show);