为什么在extjs中将多余的args传递给this.on函数?

时间:2011-02-01 05:25:29

标签: extjs

在特定组件中,这是我看到的现有代码:

this.on('afterrender',function(cmp){
this.somePanel.someTabPanel.setAsUnSelected(); 
},this);

我的问题是:cmp是什么?它不是像btne这样的标准......是吗? 另外,传递最后一个'this'对象的重点是什么? this.somePanel.someTabPanel.setAsUnSelected();中包含的逻辑应该在afterrender之后执行。那么为什么我们在执行函数后将arg 'this'传递给on函数?

1 个答案:

答案 0 :(得分:0)

您应该查看API文档:http://dev.sencha.com/deploy/dev/docs/

如果此事件是针对EditorGridPanel(http://dev.sencha.com/deploy/dev/docs/?class=Ext.grid.EditorGridPanel)的,则表明传入了Ext.Component。变量名'cmp'只是一个名称 - 它没有实际意义。在这种情况下,它只是引用传入的组件(在本例中为编辑器网格)。对于同一个EditorGridPanel(或您正在使用的任何组件),请查看“on”的方法定义:

on( String eventName, Function handler, [Object scope], [Object options] ) : void

它需要一个eventName:'afterrender',一个函数处理程序:你的“function(cmp){...},下一个参数是调用该函数的”范围“。在这种情况下,范围就像所有的javascript函数一样,你可以关闭以后的参数(如果你不需要它,你不需要传入“this”)

也许如果我重新格式化你的脚本会更清楚:

this.on(
  'afterrender',  //this is the first parameter passed to the 'on' method
  function(cmp) {
    this.somePanel.someTabPanel.setAsUnSelected(); 
  },  //the function that will be called (after rendering) is the 2nd parameter
  this //this is 3rd argument that the "on" method takes, the "scope that the function is called in
);