Ext JS 中的多个 类 以更新和共享相同的配置设置

Multiple classes in Ext JS to update and share the same config settings

我对使用 Ext JS 4.0.7 还很陌生,最近发现了 Config 选项,所以我设置了以下配置 class,其初始化如下:

Ext.define('CurrentRowSelection', {
extend: 'Ext.app.Controller',

config: {
currentAccountID: {
  $value: 'Empty',
  cached: true,
  evented: true
 }
},

initialize: function(config) {
this.callParent(config);
}

});

我可以从另一个 class 的 侦听器事件 中很好地更新此配置,即右键单击行记录并获取 currentAccountID 值。但是,每次我尝试在初始化后从新的 class 访问新的、更新的配置时,它都会恢复到 'Empty' 值。

以下用于从包含侦听器的 class 设置配置:

var CurrentRowSelection = new CurrentRowSelection();
CurrentRowSelection.setCurrentAccountID(1);

然而,当我在一个新的 class 中创建一个新的构造函数时,希望从其他软件访问这个新更新的配置,我的 console.log 告诉我它正在不断地恢复到默认值,因为每次创建新的构造函数时它似乎都在初始化 - 这是有道理的,但我需要停止它。

我如何做到这一点并确保始终保存此值,每次?谢谢。

不要每次都制作新的控制器。每个控制器应该只实例化一次,因为如果你实例化多个相同类型的控制器,你在control方法中准备的每个事件绑定都会被执行多次(control方法通常是最重要的方法controller,尽管可能会有例外。)

因此每个控制器都应该仅作为单个实例存在,并且可以随时随地使用 getController 访问该单例:

MyAppName.app.getController("ControllerName").setCurrentAccountID(1)

也就是说,我建议研究使用存储来存储数据,而不是控制器。商店提供与服务器同步设置的可能性(创建、读取、更新、删除)。如果你想创建一个单例商店,你会给它一个 storeId 并使用 Ext.getStore() 来访问商店。

例如,我的应用程序中的配置设置在商店的第一条记录中,storeid AllSettings:

Ext.getStore("AllSettings").getAt(0).get("groupDiscoveryCacheHours")