在ExtJS 4 MVC中,我应该在哪里定义全局函数?

25
我需要定义一些函数,这些函数可以在我的应用程序的任何地方调用。实现此目的的最佳方法是什么?
2个回答

48

个人而言,为了尽可能地保持 EXT-MVC,我有一个充满静态方法的 Utilities 类。可以像任何其他类一样要求它来维护适当的依赖关系。这也确保这些方法在 EXT 环境中运行,因此所有 EXT 都可用。

Ext.define('MyApp.Utilities', {
    statics: {
        foo: function (a, b) {
            return a + b;
        }
    }
});

Ext.define('MyApp.MyView', {
    extends: 'Ext.panel.Panel',
    requires: ['MyApp.Utilities'],

    initComponent: function () {
        MyApp.Utilities.foo(1, 2);
    }
});

你能提供一些关于你想法的小例子吗? - s.webbandit
2
Utilities.foo 调用不应该改为 MyApp.Utilities.foo 吗? - JohnnyHK
这就是我在最后一刻更改命名空间得到的结果。问题已解决,谢谢。 - David Kanarek
很棒的答案。另外在Sencha Architect中,您可以将实用程序类JS文件添加为项目资源。 - darren
如果不想返回任何东西怎么办? - Raza Ahmed
显示剩余2条评论

7
除了@David Kanarek的静态方法之外,还有一种替代方法是定义单例模式。代码:
Ext.define('MyApp.Utilities2', {
    singleton: true,
    global_var2: 'Hello World',
    foo2: function (a, b) {
        return a + b;
    },
});

我已经在这里创建了一个fiddle: https://fiddle.sencha.com/#fiddle/qu1 静态方法和单例模式的区别在于:
  • MyApp.Utilities2(单例模式)是一个对象,
  • MyApp.Utilities(静态方法)是一个类。
因此,您可以选择引用类本身或引用该类的一个实例以方便使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接