我的应用程序在过去一年左右一直在增长,我终于开始通过扩展现有组件来拆分常用组件。我发现这非常有用 - 提高开发和维护的速度。我的问题是我没有掌握在我的组件上使用自定义参数的概念,并希望有人可以在以下示例中提供一些帮助。具体来说,我似乎无法访问initComponent函数中声明的代理内部的自定义参数(myCustomParam):
MyEmployeeGrid = Ext.extend(Ext.grid.GridPanel, {
myCustomParam: "CompanyX",
initComponent:function() {
//Store Reader
var myReader = new Ext.data.JsonReader({
root : 'objectsToConvertToRecords',
idProperty: 'id',
fields : [
{name: 'id'},
{name: 'employee', allowBlank:false},
{name: 'department', allowBlank:false}
]
});
//Store Proxy
var dwrProxy = new Ext.ux.data.DwrProxy({
apiActionToHandlerMap : {
read : {
dwrFunction : EmployeeService.readCompanyEmployees,
getDwrArgsFunction: function(request, recordDataArray, oldRecordDataArray) {
return [myCustomParam];
}
}
}
});
//Setup Params for the grid
Ext.apply(this, {
store: new Ext.data.Store({
proxy: dwrProxy,
reader: myReader,
autoLoad : true,
autoSave: true
}),
columns: [{header: "Employee", dataIndex: 'employee'},
{header: "Department", dataIndex: 'department'}]
});
MyEmployeeGrid.superclass.initComponent.apply(this, arguments);
} // eo function initComponent
,onRender:function() {
MyEmployeeGrid.superclass.onRender.apply(this, arguments);
} // eo function onRender
});
Ext.reg('myemployeegrid', MyEmployeeGrid);
答案 0 :(得分:1)
myCustomParam
是相关对象的属性。它本身从未被声明为变量。您可以通过jslint运行代码来查看此信息。
您想要this.myCustomParam
。
但是,如果您尝试传入参数,则可能需要尝试这种方式:
MyGrid = Ext.extend(Ext.grid.GridPanel, {
constructor: function(cfg) {
cfg = cfg || {};
// ... do stuff ...
MyGrid.superclass.constructor.call(this, cfg);
}
});
答案 1 :(得分:0)
我有一种强烈的感觉,这与调用getDwrArgsFunction的范围有关。它可能不知道myCustomParam是什么(尽管事实上这应该是this.myCustomParam,并且你想在应用任何配置之后设置它),因为它没有在DwrProxy对象中声明并且没有引用回到它拥有的MyEmployeeGrid对象。
我会以下列方式调试/尝试修复:
免责声明:根据您的DwrProxy等(我们无法看到代码),其中一些不会有好处。
答案 2 :(得分:0)
代理无法访问变量,因为它未在代理本身的范围内定义。我过去一直在努力解决这类问题,我认为组件会像闭包一样跟踪变量,但它们不会。
您可以通过将网格范围明确地移交给处理函数来解决您的问题,方法是将其作为委托,您需要更改的是使您想要访问实例变量的变量而不仅仅是局部变量。
的变化:
MyEmployeeGrid = Ext.extend(Ext.grid.GridPanel, {
myCustomParam: "defaultValue",
initComponent:function() {
...
//Store Proxy
var dwrProxy = new Ext.ux.data.DwrProxy({
apiActionToHandlerMap : {
read : {
dwrFunction : EmployeeService.readCompanyEmployees,
getDwrArgsFunction: function(request, recordDataArray, oldRecordDataArray) {
return [this.myCustomParam];
}.createDelegate(this)
}
}
});
var myGridInstance = new MyEmployeeGrid({ myCustomParam: 'ValueForThisInstance' });
希望这对你有所帮助,祝你好运