我是Extjs的新手,并且正在关注创建模型层次结构的Extjs 5示例: (http://docs.sencha.com/extjs/5.0/core_concepts/data_package.html)
我创建了一个基本模型,它使用url字段保存代理。我现在想扩展这个基本模型,只覆盖下面的url部分:
Ext.define('MyPortal.model.Base', {
extend: 'Ext.data.Model',
fields: [{
name: 'id',
type: 'int'
}],
schema: {
namespace: 'MyPortal.model', // generate auto entityName
proxy: {
type: 'ajax'
,url : '/portal-web/{entityName}'
,reader: {
type:'json',
rootProperty:'{entityName:lowercase}',
idProperty: 'id'
}
}
}
});
这是一个儿童模特:
Ext.define('MyPortal.model.Account', {
extend : 'MyPortal.model.Base'
,fields: [
{name: 'accountId', type: 'string'},
{name: 'name', type: 'string'}
]
, //add something here to override the url from the base model above?
});
我尝试在子模型中添加url字段或函数,但忽略了这些。子模型是否可以覆盖父级的URL参数?
谢谢!
答案 0 :(得分:2)
schema
中的proxy
选项是Ext5称之为ObjectTemplate
的内容。简而言之,它被用作模式模型的默认配置。
您可以在模型本身的proxy
配置中覆盖此默认值(一个代理实例将由模型类创建 - 而不是由模型实例创建)。请注意,model class本身并不接受url
选项,必须在proxy
中设置。
对你而言,这会产生这样的结果:
Ext.define('MyPortal.model.Account', {
extend : 'MyPortal.model.Base' // I guess you had a typo here
,fields: [
{name: 'accountId', type: 'string'},
{name: 'name', type: 'string'},
]
// Override proxy URL (the other options of the schema's proxy
// will be used)
,proxy {
url: 'path/to/accounts'
}
});
仅供参考,读者没有idProperty
选项(所以说the docs),这次是in the model ......
答案 1 :(得分:0)
我有一个稍微不同的问题:我的数据模型是生成的,所以我使用override:来扩展这样的模型类:
Ext.define('app.override.Foo', {
override: 'app.data.Foo',
proxy: {url: 'rest/foo',type: 'rest'}
}
此代理覆盖在extjs 5中不起作用(在4.x中运行良好)