【问题标题】:Strange Structure?奇怪的结构?
【发布时间】:2011-10-06 07:11:13
【问题描述】:

这几行js代码是什么意思:

        ('selectionchange',function(sm, rs) {
            if (rs.length) {
                var detailPanel = Ext.getCmp('detailPanel');
                bookTpl.overwrite(detailPanel.body, rs[0].data);
            }
        })

这是以下链接的一部分: http://dev.sencha.com/deploy/ext-4.0.2a/examples/grid/binding-with-classes.js


更新: 我删除了这些行并且代码运行没有任何差异! 这是一个编码错误 谢谢大家

【问题讨论】:

  • 从链接文件中的缩进来看,似乎缺少某些东西。代码是否运行是因为我怀疑它
  • @meouw:代码运行是因为语法正确,但它只是创建了函数并将其丢弃,因此函数内部的代码永远不会执行。

标签: javascript function syntax extjs4


【解决方案1】:

我会说这是一个编辑错误。这里有更多的上下文:

    initEvents: function() {
        // call the superclass's initEvents implementation
        this.callParent();

        // now add application specific events
        // notice we use the selectionmodel's rowselect event rather
        // than a click event from the grid to provide key navigation
        // as well as mouse navigation
        var bookGridSm = this.getComponent('gridPanel').getSelectionModel();
        ('selectionchange', function(sm, rs) {
        if (rs.length) {
            var detailPanel = Ext.getCmp('detailPanel');
            bookTpl.overwrite(detailPanel.body, rs[0].data);
        }
    })
        bookGridSm.on('selectionchange', this.onRowSelect, this);
    },

这是整个文件中唯一提到bookTpl。有人将似乎是事件绑定的内容复制到他们的粘贴缓冲区中,然后不小心将其粘贴到了此文件中,或者他们故意将其粘贴到该文件中以检查 bookGridSm.on 调用的语法并忘记自己清理。

查找示例的勘误表。

【讨论】:

  • JSLint 证实了你的观点。
  • @c69:谢谢。这是一个有趣的编辑错误:(AFAIK)语法正确,但什么都不做。
【解决方案2】:

这段代码本身不做任何事情,它只是死代码,一个使用逗号运算符的括号化表达式。

逗号运算符将计算第一个表达式'selectionchange',然后是函数表达式,但绝对没有效果,事实上,进行优化的Javascript引擎甚至可能不会计算这两个表达式。

看起来像一个 函数调用(可能是 bookGridSm.on 方法,用于绑定事件处理程序,因为该对象是函数的唯一作用域)但不知何故他们删除了调用乳清的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多