2011-06-30 131 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);