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

时间:2016-12-09 12:17:37

标签: extjs extjs4

我是使用Ext JS 4.0.7的新手,并且最近发现了Config选项,因此我设置了以下配置类,其初始化如下:

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

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

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

});

我可以很好地从另一个类的侦听器事件更新此配置,右键单击行记录并获取currentAccountID值。但是,每次我尝试在初始化后从新类访问新的,更新的配置时 - 它会一直恢复为“空”值。

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

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

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

如何执行此操作并确保始终保存此值,每次?谢谢。

1 个答案:

答案 0 :(得分:1)

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

因此,每个控制器应仅作为单个实例存在,并且只要您需要,就可以使用getController访问该单例:

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

那就是说,我建议考虑使用商店进行数据存储,而不是控制器。商店提供了与服务器同步设置的可能性(创建,读取,更新,删除)。如果您想创建单身商店,可以给它storeId并使用Ext.getStore()来访问商店。

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

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