我是使用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告诉我它不断恢复到默认值,因为它似乎每次创建一个新的构造函数时都要初始化 - 这是有道理的,但我需要阻止它。
如何执行此操作并确保始终保存此值,每次?谢谢。
答案 0 :(得分:1)
每次都不要制作新的控制器。每个控制器只应实例化一次,因为如果您实例化多个相同类型的控制器,那么您在control
方法中准备的每个事件绑定都会执行多次(control
方法通常是最重要的方法一个controller
,虽然可能有例外。)
因此,每个控制器应仅作为单个实例存在,并且只要您需要,就可以使用getController
访问该单例:
MyAppName.app.getController("ControllerName").setCurrentAccountID(1)
那就是说,我建议考虑使用商店进行数据存储,而不是控制器。商店提供了与服务器同步设置的可能性(创建,读取,更新,删除)。如果您想创建单身商店,可以给它storeId
并使用Ext.getStore()
来访问商店。
例如,我的应用程序中的配置设置位于具有storeid AllSettings
的商店的第一条记录中:
Ext.getStore("AllSettings").getAt(0).get("groupDiscoveryCacheHours")