如何在MVC中使用自定义storeId?

时间:2014-06-02 11:24:57

标签: extjs extjs4.2 extjs-mvc extjs-stores

鉴于这样的商店,在运行时,storeId将是App.store.Entities而不是Entities

Ext.define('App.store.Entities', {
    extend: 'Ext.data.Store',
    storeId: 'Entites',

documentation州:

  

请注意,当Controller实例化存储时,storeId将被商店名称覆盖。

这不仅适用于控制器中需要商店

stores: ['App.store.Entities'],

但也是用

异步创建的
this.getStore('App.store.Entities')

这是所有预期的行为,但我不喜欢这个事实,这种行为会强制使用

  • 完全限定的名称App.store.Entities
  • 或坚持严格的命名约定目录结构。

问题

我遇到的问题是我的应用程序变得非常大,并且在一个store文件夹中拥有所有store个定义不再是一个选项。我想重构一个像下面这样的文件夹结构。

/app
    /plugin1
        /store
            /Settings
            /Details
        /model
        /view
    /plugin2
        /store
            /Items
            /Settings
        /model
        /view

如果我可以强制使用storeId,我可以将其定义为'plugin1.Settings',并且可以提供比在该地方重复'App.plugin1.store.Settings'更易读且更便携的代码。

我怎么可能解决这个问题?我可以从哪里开始?

1 个答案:

答案 0 :(得分:1)

实际上,我不允许Ext实例化我的商店(仅在极少数情况下),因为这会阻止创建同一视图类的多个实例。我在视图中手动实例化商店' initComponent覆盖。

这允许我无缝多个实例,如果我愿意,我可以选择storeId - 我通常不会使用storeId,但我会从视图中获取商店。

但是,如果您只需要因文件夹组织而选择storeId,则可以使用较短的名称,例如subfolder1.StoreName1等,但文件夹结构必须拆分在store文件夹中。

app/store/subfolder1 app/store/subfolder2