假设我有两个脚本控件,其中一个控件将另一个作为子控件:
ParentControl : ScriptControl
{
ChildControl childControl;
}
子控件的脚本:
ChildControl = function(element)
{
ChildControl.initializeBase(this, [element]);
}
ChildControl.prototype =
{
callMethod: function()
{
return 'hi';
},
initialize: function()
{
ChildControl.callBaseMethod(this, 'initialize');
},
dispose: function()
{
ChildControl.callBaseMethod(this, 'dispose');
}
}
在脚本端,我想调用子控件上的方法:
ParentControl.prototype =
{
initialize: function()
{
this._childControl = $get(this._childControlID);
this._childControl.CallMethod();
ParentControl.callBaseMethod(this, 'initialize');
},
dispose: function()
{
ParentControl.callBaseMethod(this, 'dispose');
}
}
问题是,每次我尝试时都会说找不到或不支持此方法。 ParentControl 不应该访问 ChildControl 上的所有方法吗?
是否有某种方法必须公开该方法以便 ParentControl 可以看到它?
更新 是否可以“输入” this._childControl ?
这就是我问的原因...当我使用 Watch 时,系统知道 ChildControl 类是什么,并且我可以从类本身调用方法,但是,我无法从 this._childControl 调用相同的方法目的。您可能会认为,如果内存中的类设计(?)能够识别现有的方法,那么从该类实例化的对象也会识别。
最佳答案
在客户端上,您可以通过将父控件对象的名为 _childControlID 的字段传递给 $get 来使用它。这有一些问题:
- _childControlID 是如何设置的?我猜测将其添加为服务器上父控件描述符中的属性,但您没有显示该代码,也没有在客户端父控件类上显示属性。
- $get 返回元素引用——而不是控件。因此,即使 _childControlID 设置为有效的元素 ID,该元素也不会具有名为 CallMethod 的方法。如果客户端子控件类在父控件之前初始化,则该元素将有一个名为“control”的字段,您可以使用该字段来访问将自身“附加”到该元素的脚本控件。当然,只有子控件在父控件之前初始化时,这才有效。
关于ASP.Net ScriptControl - 从另一种方法调用一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/400849/