繁体   English   中英

软件包中的extjs 6全球存储

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM