我有一个用这样的方法创建的类:
Ext.define('MY.class.Manager', {
....
....
....
manageStuff: function(){
}
}
最初,我只在一个地方需要manageStuff
功能,所以一切都很好。现在,我已经添加了另一个类,我需要能够在新类中调用manageStuff
函数。
我试图在新课程中获得参考:
var ManagerClass = Ext.getClass('MY.class.Manager');
还有:
var ManagerClass = Ext.getClass('class.Manager');
两者都返回null
为了确保在我尝试获取Manager类之前已经定义了Manager,我输入了print语句:
他们读作:
...making manager class
...getting manager class
寻找任何帮助,因为我确信我对这个问题的解决方法开始时甚至都不正确。
答案 0 :(得分:4)
要在其他不相关的类之间分享行为特征,请使用mixins:
Ext.define('MyApp.mixin.Foo', {
foo: function(bar, baz) {
alert(bar + ' ' + baz);
}
});
Ext.define('MyApp.class.Foo', {
mixins: [
'MyApp.mixin.Foo'
],
methodThatCallsFoo: function(bar, baz) {
this.foo(bar, baz); // foo method has been mixed in the
}
});
这适用于Ext JS 4.x +;请记住,在Ext JS 5中,这种机制变得更加强大,请参阅Ext.Mixin doc。
答案 1 :(得分:0)
您可以使该方法可全局访问,因此两个类都可以使用它。首先,如果您还没有全局命名空间,可以使用Ext.namespace
创建一个Ext。在这个例子中,我将MY
作为命名空间,所有的全局变量和方法都将包含在其中,而MY.helper
将包含你的辅助方法(如manageStuff
)。< / p>
Ext.namespace(
'MY',
'MY.helper',
// more namespaces inside 'MY' as needed ...
);
然后你可以声明你的辅助方法:
MY.helper.manageStuff = function() {
// do stuff...
};
现在您可以在应用程序的任何位置使用此方法(以及MY
内存储的任何其他内容)。
Ext.define('MY.class.Manager', {
//...
//...
someFunctionThatCallsManageStuff: function(){
MY.helper.managerStuff();
}
});
注意:在javascript中,您可以将任何变量存储在全局命名空间中,并直接调用它们,但我发现它可能会使全局命名空间变得混乱。相反,我喜欢有一个包含我所有全局变量的变量。在此示例中,您的单个变量为MY
。然后你可以添加&#34;包&#34;它可以组织你的全局变量,例如MY.helper
。
注意2:在上面的示例中使用Ext.namespace
等效于以下内容:
//init MY as global variable
MY = {};
// add properties to MY
MY.helper = {};
// add properties to MY.helper
MY.helper.manageStuff = function() {
// do stuff...
};