weixin_42389881 2010-08-03 18:48
浏览 371
已采纳

scope : this 问题

[code="js"]GridPanel = Ext.extend(Ext.grid.GridPanel, {
_store : null,
// 构造方法
constructor : function(_config) {
if (_config == null) {
_config = null;
}
Ext.apply(this, _config);
this._store = new Ext.data.JsonStore({
data : [{
name : "张三",
sex : "男",
age : 11
}, {
name : "李四",
sex : "女",
age : 10
}],
fields : ["name", "sex", "age"]
});
// 拷贝父类的构造方法到当前对象
ViewForm.superclass.constructor.call(this, {
width : 300,
autoHeight : true,
store : this._store,
renderTo : Ext.getBody(),
// 取消标题下拉选项
enableHdMenu : false,
// 禁止拖动
enableColumnMove : false,
// 定义单选 selModel可简写sm
sm : new Ext.grid.RowSelectionModel({
singleSelect : true,
listeners : {
"rowselect" : {
fn : function(_sm, _index,
_data) {
this.fireEvent("rowse",
_data);
},
scope : this
}
}
}),
// colModel 可简写cm
cm : new Ext.grid.ColumnModel([{
header : "姓名",
align : "center",
sortable : true,
dataIndex : "name"
}, {
header : "性别",
align : "center",
sortable : true,
dataIndex : "sex"
}, {
header : "年龄",
align : "center",
sortable : true,
dataIndex : "age"
}])
});
this.addEvents("rowse");
}
});
[/code]
以下是调用
[code="js"]
Ext.onReady(function() {
var _grid = new GridPanel();
_grid.on("rowse", function(_data) {
_form.loadRecord(_data);
});
});
[/code]

如果代码没scope : this,则_grid.on无法监听

请解答下为什么.3Q

  • 写回答

2条回答 默认 最新

  • CaiHuajiang 2010-08-03 19:37
    关注

    [code="js"]function(_sm, _index, _data) {

    this.fireEvent("rowse", _data);

    }[/code]
    如果只看上面一段,你就会知道this是指这个function的内部作用域。
    那么这个域内部有fireEvent方法吗?当然没有。

    Extjs的scope:this是将上面的function内this作用域改变为整个控件的作用域。
    至于怎么实现的,你可以参考源码实现。其本质就是call与apply的调用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 做一个关于单片机的比较难的代码,然后搞一个PPT进行解释
  • ¥40 matlab简单代码修改补充
  • ¥15 python提取.csv文件中的链接会经常出现爬取失败
  • ¥15 数据结构中的数组地址问题
  • ¥15 maya的mel里,怎样先选择模型A,然后利用mel脚本自动选择有相同名字的模型B呢。
  • ¥15 Python题,根本不会啊
  • ¥15 会会信号与系统和python的来
  • ¥15 关于#python#的问题
  • ¥20 oracle RAC 怎么配置啊,配置
  • ¥15 excel 日常使用中出现问题