this.getUrl = 'test';
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: function(checkbox, checked) {
alert(this.getUrl);
},
}
)
)
Run Code Online (Sandbox Code Playgroud)
如何this.getUrl在检查处理程序中访问?
mis*_*cko 11
我想知道为什么没有人建议显而易见,只需要使用Ext方式并使用'scope'配置属性:
this.getUrl = 'test';
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: function(checkbox, checked) {
alert(this.getUrl);
},
scope: this
}
)
)
Run Code Online (Sandbox Code Playgroud)
事件处理程序通常从不同的范围(this值)调用.如果您想要的只是处理程序中的单个值,则词法范围是最简单的方法:
var getUrl = 'test'; // now it's just a regular variable
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: function(checkbox, checked) {
alert(getUrl); // still available - lexical scope!
},
}
)
)
Run Code Online (Sandbox Code Playgroud)
或者,如果您确实希望父对象this在事件处理程序中可用,则可以使用Ext.Function.bind以修改范围:
this.getUrl='test';
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: Ext.Function.bind( function(checkbox, checked) {
alert(this.getUrl);
}, this ), // second arg tells bind what to use for 'this'
}
)
)
Run Code Online (Sandbox Code Playgroud)
更新:Ext.Function.bind是一个ExtJS 4功能.如果您使用的是ExtJS 3.x或更低版本,则可以使用Function.createDelegate相同的结尾:
this.getUrl='test';
this.items.add(
new Ext.form.Checkbox(
{
listeners: {
check: function(checkbox, checked) {
alert(this.getUrl);
}.createDelegate(this)
}
)
)
Run Code Online (Sandbox Code Playgroud)
有多种方式可以访问该属性getUrl。以下是一些可能的选择:
1. 使用 Ext.getCmp:如果您为 FormPanel (或您正在使用的其他 extjs 组件)设置了idExt.getCmp ,则可以使用Ext.getCmp()方法访问它。所以,
var yourComponent = Ext.getCmp('yourComponentId');
alert(yourComponent.getUrl);
Run Code Online (Sandbox Code Playgroud)
2.使用OwnerCt属性:如果您需要访问父容器(如果父容器持有您的复选框),您可以通过公共属性访问父容器OwnerCt。
3. 使用 refOwner 属性:如果您在代码中使用refsystem,则可以利用此属性来获取容器并访问所需的变量。
我认为您很容易选择第一个选项。
| 归档时间: |
|
| 查看次数: |
8785 次 |
| 最近记录: |