[英]extjs 6 global store in packages
我正在使用extjs 6,并且需要为程序包创建全局存储。 我通常会在以下位置为我的应用程序创建全球商店
app/store/mystore.js
然后在Application.js中注册
stores:[
'mystore'
]
我试图在创建它
packages/mypkg/src/store/mypkgstore.js
但是它不起作用...运行应用程序时,不会下载mypkgstore.js。
我应该将其添加到任何文件中作为应用程序的全局存储吗?
我尝试将其添加到其他类的required子句中,并下载了文件,但存储未加载数据...
在Application.js中定义存储,如下所示:
Ext.define('MyApp.Application', {
extend: 'Ext.app.Application',
name: 'MyApp',
stores: [
// TODO: add global / shared stores here
'mystore'
]
});
确保在mypkgstore.js中,将其指定为:
Ext.define('APP.store.MyPkgStore', {
extend: 'Ext.data.Store',
alias: 'store.mystore',
storeId: 'MyPkgStore'
});
不确定目前是否有帮助。 无论如何,您可能知道,包没有像Application.js这样的任何初始化文件,在这种情况下,您需要手动实例化每个存储。 就我而言:
主视图:
Ext.define('Activities.view.Activities', {
extend: 'Ext.grid.Panel',
xtype: 'activities',
requires: [
'Activities.store.Activities'
],
store: Ext.create('Activities.store.Activities'),
columns: [...]
});
商店:
Ext.define('Activities.store.Activities', {
extend: 'Ext.data.Store',
alias: 'store.activities',
storeId: 'activities',
});
或者,如果您有许多商店,则可以在主视图的viewController的init()方法中实例化所有商店,例如:
Ext.define('Activities.view.ActivitiesController', {
extend: 'Ext.app.ViewController',
alias: 'controller.activities',
id: 'activities',
requires: [
'Activities.store.Activities',
'Activities.store.Countries',
...
],
/**
* Called when the view is created
*/
init: function (view) {
Ext.create('Activities.store.Activities');
Ext.create('Activities.store.Countries');
...
}
});
我希望这可以帮助你。 :)
最好的答案是通过使用MVVM的概念创建一个ViewModel
您在其中声明网格的视图:
Ext.define('YourProject.View',{
requires : ['YourProject.Controller','YourProject.ViewModel'],
extend : 'Ext.form.Panel',
controller : 'MyController',
viewModel : 'MyViewModel',
initComponent : function(){
var me = this;
Ext.apply(me,{
xtype : 'grid',
itemId : 'myGrid',
});
};
});
在ViewModel中存储的示例:
Ext.define('YourProject.ViewModel',{
extend : 'Ext.app.ViewModel',
alias : 'MyViewModel',
//declare you stores here
stores : {
myStore : {
autoLoad : true,
fields : [{name : 'id', type : 'string'},
{name : 'value', type : 'string'}],
proxy : {
url : 'you/actionHere.do',
extraParams : {
yourParameter1 = 'paramVal',
yourParameter2 = 'paramVal2'
},
reader : {
type : 'json',
rootProperty : 'data',
totalPropert : 'total'
}
}
}
}
});
使用控制器中的商店:
Ext.define('YourProject.Controller',{
extend : 'Ext.app.ViewModel',
alias : 'myController',
applyState : function(){
var me = this;
//Get you store from ViewModel by doing this
var store = me.getView().getViewModel().getStore('dmlshFeeAmt');
me.getView().down(#'myGrid').setStore(store);
}
});
希望这可以帮助您的项目:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.