在 Extjs 中创建全局持久对象

Creation of a global, persistent object into Extjs

大家好。 我正在参与一个使用 EXTjs 的大项目(我猜它是 4.0),这个项目很大而且已经落后了几年。

我不喜欢 Extjs,所以我正在尝试学习做什么以及如何做,我的新任务是 创建一个持久的全局对象,可用于整个应用程序 我需要在其中存储一些在项目的不同部分使用的信息(例如,用户可以在执行时将此对象的特定 属性 设置为 "true"一些动作和这个 "true" 它将被用于另一个 viewcontroller 以启用一些功能,比如这样的东西)。

所以,我创建了一个名为 userJsonMainModel.js 的新文件:

Ext.define('Tac3.userJsonMainModel', {
    extend: 'Ext.data.Model',

    constructor: function() {
        var userJsonMainModel = this;
        userJsonMainModel.callParent(arguments);
        userJsonMainModel.data.tmp = {};

    },
    testProperty:{foo:"bar"},
    testMethod: function (){
        console.log("testFunction called");

    }
});

并在 Application.js 中:

requires: [
        ...
        'Tac.userJsonMainModel'
    ],

    stores: ['Countries', 'Kpis', 'Dimensions'],

    autoCreateViewport: false,

    init: function() {
        var controller = this
        Ext.tip.QuickTipManager.init();
        Ext.setGlyphFontFamily('FontAwesome');
        var userJsonMainModel = controller.createUserJsonMainModel();
        console.log("into init: ", this.userJsonMainModel.testProperty);

...

createUserJsonMainModel: function() {
        var controller = this;

        controller.userJsonMainModel = Ext.create('Tac3.userJsonMainModel', {
            controller: controller
        });
        console.log("check if the jsonmainmodel exist ",controller.userJsonMainModel.testProperty);

    },

这确实有效,现在第二步是从另一个视图(或其 viewcontroller)访问同一个对象,这就是我对 viewController:

Ext.define('Tac3.view.udesign.UdesignController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.udesign',

    init: function(view) {
        ...
        console.log("into init: ", this.userJsonMainModel.testProperty);

    }

这实际上是抛出一个:

Uncaught TypeError: Cannot read property 'testProperty' of undefined

我很确定 application.js 中定义的对象可以全局访问,但我想我错了,或者做错了事。

由于我找不到关于这个主题的示例(这可能是因为它不是执行此操作的标准方法),所以我想问一下我做错了什么?

只需定义一个 class 并在您的应用程序中要求它:

Ext.define('MyApp.Globals', {
    singleton: true,
    foo: 100,
    bar: 'baz'
});