Extjs中Ext.data.Model的schema配置项

来源:互联网 发布:java面向对象的思想 编辑:程序博客网 时间:2024/04/29 21:26

一、首先看例子:
Ext.define(‘Ims.model.BaseDataModel’, {
extend: ‘Ext.data.Model’,

requires: [    'Ims.ux.data.proxy.Format',    'Ext.data.identifier.Negative'],identifier: 'negative',idProperty: 'id',fields: [    {name: 'id', type: 'int'}],schema: {  //schema用于基类,尤其是配置namespace这个项时    namespace: 'Ims.model',    urlPrefix: Ims.Config.server.contextPath,    proxy: {        type: 'format',        api: {            read: '{prefix}/{entityName:lowercase}/get',      //entityName在子类中产生,example: sys/menu,子类中可以配置entityName项,也可以不配置而自动产生            create: '{prefix}/{entityName:lowercase}/create',            update: '{prefix}/{entityName:lowercase}/update',            destroy: '{prefix}/{entityName:lowercase}/delete'        }    }}

});

子类Menu继承自baseModel:
Ext.define(‘Ims.model.sys.Menu’, {
extend: ‘Ims.model.BaseDataModel’,

alias: 'model.sysmenu',requires: [    'Ext.data.validator.Length',    'Ext.data.validator.Presence'],entityName: 'sys/menu',fields: [    {name: 'parentId', type: 'int'},    {name: 'text', type: 'string'},    {name: 'sort', type: 'int'},    {name: 'type', type: 'string'},    {name: 'href', type: 'string'},    {name: 'target', type: 'string'},    {name: 'iconCls', type: 'string'},    {name: 'isShow', type: 'string', defaultValue: '1'},    {name: 'permission', type: 'string'},    {name: 'description', type: 'string'},    {name: 'remarks', type: 'string'},    {name: 'isNewRecord', type: 'boolean', defaultValue: true}],validators: {    parentId: [{        type: 'presence', message: '必须选择上级菜单'    }],    text: [{        type: 'presence', message: '必须填写菜单名称'    }, {        type: 'length', min: 2, minOnlyMessage: '最小长度必须大于2'    }],    type: [{        type: 'presence', message: '必须填写选择菜单类型'    }],    target: [{        type: 'presence', message: '必须填写菜单目标'    }, {        type: 'length', min: 2, minOnlyMessage: '最小长度必须大于2'    }],    permission: [{        type: 'presence', message: '必须填写菜单权限'    }, {        type: 'length', min: 2, minOnlyMessage: '最小长度必须大于2'    }]}

});
二、上面的代码是我配置的一个基类,其他model均从这个基类中继承而来。如果在基类中配置了schema中的namespace,那么子类的entityName就会是Model中去掉namespace的那部分。比如:’Ims.model.sys.Menu’这个类,因为它的基类有namespace:Ims.model,所以他的entityName默认自动产生就是sys.Menu。但是这样配置的话显然无法向后台请求,格式应该是:sys/menu这样的形式,所以我们也可以在子类Menu中手动配置entityName:sys/menu。
以上内容来源于官方文档:
Relative Naming

When describing associations between entities, it is desirable to use shorthand names that do not contain the common namespace portion. This is called the entityName as opposed to its class name. By default, the entityName is the full class name. However, if a namespace is used, the common portion can be discarded and we can derive a shorter name. In the following code, “MyApp.model.Foo” has an entityName of “Foo” and the schema has a namespace of “MyApp.model”.

If you use deeper nesting for entities, you may need to set the namespace config to account for this. For example:

Sample Code
Ext.define(‘MyApp.model.Base’, {
extend: ‘Ext.data.Model’,

 schema: {     namespace: 'MyApp.model' }

});
Your derived classes now will generate proper default entityName values even if they have further namespaces. For example, “MyApp.model.foo.Thing” will produce “foo.Thing” as the entityName given the above as a base class.
三、配置shcema的另外一大好处是,基类proxy中API的地址可以动态生成,上面的基类中可以看到api的配置为: read: ‘{prefix}/{entityName:lowercase}/get’ ,prefix的值是urlPrefix,entityName可以自动生成也可以手动配置。
四、还有一个用处。如果想在每一个请求中都添加参数,可以在proxy中配置。
以上内容来源: http://www.extjstips.com/2015/10/13/extjs-using-a-base-model-and-schema/

0 0
原创粉丝点击