如何使用别名从 ExtJS 中的商店引用模型?
Posted
技术标签:
【中文标题】如何使用别名从 ExtJS 中的商店引用模型?【英文标题】:How can I reference a Model from a Store in ExtJS using alias? 【发布时间】: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
属性是全名,至少我是这样使用它的。
【参考方案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 是为组件设计的。
https://docs.sencha.com/extjs/6.5.3/classic/Ext.Class.html#cfg-xtype有关此主题的更多资源:
https://docs.sencha.com/extjs/6.5.3/classic/Ext.data.Model.html#property-entityName https://docs.sencha.com/extjs/6.5.3/classic/Ext.data.schema.Schema.html https://docs.sencha.com/extjs/6.5.3/classic/Ext.data.schema.Namer.html【讨论】:
【参考方案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
。
【讨论】:
以上是关于如何使用别名从 ExtJS 中的商店引用模型?的主要内容,如果未能解决你的问题,请参考以下文章