объяснение кода javascript - PullRequest
       23

объяснение кода javascript

1 голос
/ 30 июня 2011

Может кто-нибудь объяснить мне, что делает этот код?

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

Ответы [ 4 ]

2 голосов
/ 30 июня 2011

довольно просто, если show true, он вызовет dojo.removeClass(this.listNode, "tweetviewHidden");, а если false, то вызовет dojo.addClass(this.listNode, "tweetviewHidden");.По сути, это переключающая функция.

скобки [] открывают объект для доступа к значению по ключу.так же, как var bla={"foo":"bar"}; bla["foo"];.Теперь, с момента его dojo, значением является функция, которая будет выполняться

1 голос
/ 30 июня 2011

Он использует скобки [] и троичный оператор ?:, чтобы сделать что-то вроде этого:

if(show){
    dojo.removeClass(this.listNode, "tweetviewHidden");
}else{
    dojo.addClass(this.listNode, "tweetviewHidden");
}
1 голос
/ 30 июня 2011

Немного более подробно, код делает что-то вроде этого:

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

f(this.listNode, "tweetviewHidden");

Полагаю, dojo действует как контейнер для функций, которые можно искать по имени с помощью [].

0 голосов
/ 30 июня 2011

Он "переключает" класс с помощью переменной "show". То есть, если «show» соответствует действительности, тогда класс будет удален из узла, в противном случае он будет добавлен в узел.

Попробуйте использовать следующий ярлык:

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