extjs 6全球商店包

时间:2017-08-26 04:13:25

标签: javascript extjs package store extjs6

我正在使用extjs 6,我需要为包创建一个全局存储。我通常在

中为我的应用程序创建全局商店
app/store/mystore.js

然后在Application.js中注册

stores:[
    'mystore'
] 

我试图在

中创建它
packages/mypkg/src/store/mypkgstore.js

但它不起作用......当应用程序运行时,不会下载mypkgstore.js。

我应该将它作为应用程序的全局存储添加到任何文件中吗?

我已经尝试在其他类的必需子句中添加它并且文件被下载但是商店没有加载数据......

3 个答案:

答案 0 :(得分:0)

在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'
});

答案 1 :(得分:0)

此刻不确定此帮助。无论如何......正如您所知,包没有像Application.js这样的任何init文件,在这种情况下,您需要手动实例化每个商店。在我的情况下,我做了:

主要观点:

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');

       ...
   }

});

我希望这会对你有所帮助。 :)

答案 2 :(得分:0)

最好的答案是使用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);

}
});

希望这可以帮助您的项目:)