【问题标题】:How can I reference a Model from a Store in ExtJS using alias?如何使用别名从 ExtJS 中的商店引用模型?
【发布时间】:2021-10-16 00:56:44
【问题描述】:

我有一个模型:

Ext.define('MyAPP.model.myMod', {
   extend  : 'Ext.data.Model',
   alias   : 'model.myMod',
});

还有一家商店:

   Ext.define('MyAPP.store.MyStore', {
      extend : 'Ext.data.Store',
      model  : 'MyAPP.model.myMod',
});

如何使用别名引用商店中的模型? 我希望能够仅使用 model: 'model.myMod',model: 'myMod' 进行引用。

我无法让它工作,我总是使用完整路径引用它:MyAPP.model.myMod

【问题讨论】:

  • this 会回答您的问题吗?这是一个旧帖子,但据我所知,今天的情况是一样的。
  • @PeterKoltai 上一篇文章说我可以使用xtype: 'model.myModel',但这不起作用。所以也许唯一的方法就是拥有全名。
  • 我认为这是唯一的方法。 xtype 只适用于Ext.create,您也可以使用Ext.createByAlias 来创建使用别名,但是对于这个商店定义,model 属性是全名,至少我是这样使用它的。

标签: javascript extjs viewmodel alias store


【解决方案1】:

我忍不住在模型上定义和使用别名属性。

这不能开箱即用(没有覆盖),因为模型正在扩展 Ext.Base。

在扩展 Ext.Class 的类中定义了别名属性。

并且store上的model属性需要className或者entityName,如果不设置自定义entityName,className是默认的。

实现此目的的一种方法是使用简写名称,如下所示:

Ext.define('foo.bar.test', {
    extend: 'Ext.data.Model',
    schema: {
         namespace: 'foo.bar'
     },
   fields:[ 'name', 'email', 'phone']
})

Ext.create('Ext.data.Store', {
    storeId: 'simpsonsStore',
    model: 'test',
    data: [
        { name: 'Lisa', email: 'lisa@simpsons.com', phone: '555-111-1224' },
        { name: 'Bart', email: 'bart@simpsons.com', phone: '555-222-1234' },
        { name: 'Homer', email: 'homer@simpsons.com', phone: '555-222-1244' },
        { name: 'Marge', email: 'marge@simpsons.com', phone: '555-222-1254' }
    ]
});

Ext.create('Ext.grid.Panel', {
    title: 'Simpsons',
    store: Ext.data.StoreManager.lookup('simpsonsStore'),
    columns: [
        { text: 'Name', dataIndex: 'name' },
        { text: 'Email', dataIndex: 'email', flex: 1 },
        { text: 'Phone', dataIndex: 'phone' }
    ],
    height: 200,
    width: 400,
    renderTo: Ext.getBody()
});

提到的使用 xtype 的选项可能会起作用,我不会依赖它,因为 xtypes 是为组件设计的。

有关此主题的更多资源:

【讨论】:

    【解决方案2】:

    您不能使用 alias 从 Store 中引用模型。但是,您可以为您的模型使用属性alternateClassName,如下所示:

    Ext.define('MyAPP.model.myMod', {
       extend  : 'Ext.data.Model',
       alternateClassName : 'myMod',
    });
    
    Ext.define('MyAPP.store.MyStore', {
          extend : 'Ext.data.Store',
          model  : 'myMod',
    });
    

    现在,您只能使用商店中的 model: 'myMod' 进行引用。 无需使用完整路径引用它:MyAPP.model.myMod

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-04
      • 2011-11-18
      • 2014-06-19
      • 2012-09-19
      • 2013-06-17
      • 2015-05-29
      • 2011-08-28
      • 1970-01-01
      相关资源
      最近更新 更多