在 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'
});
大家好。 我正在参与一个使用 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'
});