【问题标题】:javascript code explanationjavascript代码解释
【发布时间】:2011-09-25 14:47:33
【问题描述】:

谁能解释一下这段代码的作用?

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

【问题讨论】:

    标签: javascript dojo javascript-framework


    【解决方案1】:

    很简单,如果 show 为真,它将调用dojo.removeClass(this.listNode, "tweetviewHidden");,如果为假,它将调用dojo.addClass(this.listNode, "tweetviewHidden");。 本质上它是一个切换功能。

    [ ] 括号打开一个对象以通过键访问值。就像var bla={"foo":"bar"}; bla["foo"];。现在,既然是道场,值就是一个函数,会被执行

    【讨论】:

    • 我不明白为什么这个答案被否决了。有人可能会争辩说,如果show 为真,那么它不是那么多,但如果show 是一个真值(即,不是 0、""、false、null、undefined 或 NaN)则更多,但这是一个小问题。
    • 感谢您再次提高我的回答。 +1 为您提供有关真实价值观的信息!但是 false、""、null、undefined、0 和 NaN 当然是 false 而不是 true 值!猜你把它弄混了 :) 和 -10, 20, true, "foobar", 一个对象,一个数组,函数都是真值。
    • 我以“不”一词开始我的列表,以暗示我的意思是除我列出的那些之外的任何值。我会争辩说我没有把它弄混,我的“不”只是错过了。 :)
    【解决方案2】:

    稍微冗长一点,代码是这样的:

    if (show) { f = dojo["removeClass"]; }
    else      { f = dojo["addClass"];    }
    
    f(this.listNode, "tweetviewHidden");
    

    我想dojo 充当了可以通过[] 按名称查找的函数的容器。

    【讨论】:

    • 通过括号语法查找属性不是 Dojo,这只是 JS。
    【解决方案3】:

    它使用[] 括号和?: 三元运算符来执行以下操作:

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

    【讨论】:

      【解决方案4】:

      它通过“show”变量“切换”类。即如果“show”为真,则将该类从节点中移除,否则将其添加到节点中。

      考虑使用以下快捷方式:

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

      【讨论】:

        猜你喜欢
        • 2012-04-07
        • 2014-01-11
        • 2015-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多