首页 / EXTJS / extjs define研究
extjs define研究
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了extjs define研究,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4821字,纯文字阅读大概需要7分钟。
内容图文

Ext.define(‘MyApp.view.system.permission.Permission‘, { extend : ‘Ext.panel.Panel‘, xtype : ‘sys-permission‘, requires: [ ‘MyApp.ux.Util‘, ‘MyApp.model.SysRole‘ ], viewModel: { stores: { roleStore : ZUtil.createStore(‘SysRole‘, ‘SysRole/read‘), treeStore: ZUtil.createTreeStore(‘SysMainMenu/getMenuTree‘, {autoLoad :false}) } }, controller: { type: ‘sys-permission‘ }, title : ‘权限管理‘, layout : ‘border‘, items : [ { region : ‘west‘, xtype : ‘grid‘, width : 200, title : ‘角色列表‘, reference: ‘grid‘, split: true, bind : { store : ‘{roleStore}‘ }, selModel : { selType : ‘rowmodel‘ }, columns : [ { text : ‘ID‘, dataIndex : ‘id‘, hidden: true }, { text : ‘角色名称‘, dataIndex : ‘name‘, flex: 1 } ], listeners : { //activate : ‘onRoleActivate‘, itemclick : ‘onRoleClick‘ } }, { region : ‘center‘, xtype : ‘treepanel‘, title : ‘权限列表‘, rootVisible: false, reference: ‘tree‘, bind : { store : ‘{treeStore}‘ }, bbar: { items: [{ text: ‘保存‘, iconCls: ‘Disk‘, handler: ‘onPermissionSave‘ }] } } ] });
Ext.define实际是调用
Ext.ClassManager 的define
define: function (className, data, createdFn) { //<debug> Ext.classSystemMonitor && Ext.classSystemMonitor(className, ‘ClassManager#define‘, arguments); //</debug>if (data.override) { Manager.classState[className] = 20; return Manager.createOverride.apply(Manager, arguments); } Manager.classState[className] = 10; return Manager.create.apply(Manager, arguments); },
又调用了create:
/* * * Defines a class. * @deprecated Use {@link Ext#define} instead, as that also supports creating overrides. * @private */ create: function (className, data, createdFn) { // <debug> if (className != null && typeof className !== ‘string‘) { thrownew Error("[Ext.define] Invalid class name ‘" + className + "‘ specified, must be a non-empty string"); } //</debug>var ctor = makeCtor(className); if (typeof data === ‘function‘) { data = data(ctor); } //<debug>if (className) { if (Manager.classes[className]) { Ext.log.warn("[Ext.define] Duplicate class name ‘" + className + "‘ specified, must be a non-empty string"); } ctor.name = className; } //</debug> data.$className = className; returnnew Class(ctor, data, function() { var postprocessorStack = data.postprocessors || Manager.defaultPostprocessors, registeredPostprocessors = Manager.postprocessors, postprocessors = [], postprocessor, i, ln, j, subLn, postprocessorProperties, postprocessorProperty; delete data.postprocessors; for (i = 0,ln = postprocessorStack.length; i < ln; i++) { postprocessor = postprocessorStack[i]; if (typeof postprocessor === ‘string‘) { postprocessor = registeredPostprocessors[postprocessor]; postprocessorProperties = postprocessor.properties; if (postprocessorProperties === true) { postprocessors.push(postprocessor.fn); } elseif (postprocessorProperties) { for (j = 0,subLn = postprocessorProperties.length; j < subLn; j++) { postprocessorProperty = postprocessorProperties[j]; if (data.hasOwnProperty(postprocessorProperty)) { postprocessors.push(postprocessor.fn); break; } } } } else { postprocessors.push(postprocessor); } } data.postprocessors = postprocessors; data.createdFn = createdFn; Manager.processCreate(className, this, data); }); },
返回一个new Class
/* * * @method constructor * Create a new anonymous class. * * @param {Object} data An object represent the properties of this class * @param {Function} onCreated Optional, the callback function to be executed when this class is fully created. * Note that the creation process can be asynchronous depending on the pre-processors used. * * @return {Ext.Base} The newly created class */ Ext.Class = ExtClass = function(Class, data, onCreated) { if (typeof Class != ‘function‘) { onCreated = data; data = Class; Class = null; } if (!data) { data = {}; } Class = ExtClass.create(Class, data); ExtClass.process(Class, data, onCreated); return Class; };
调用的ExtClass.create返回class
/* * * @private */ create: function (Class, data) { var i = baseStaticMembers.length, name; if (!Class) { Class = makeCtor( //<debug> data.$className //</debug> ); } while (i--) { name = baseStaticMembers[i]; Class[name] = Base[name]; } return Class; },
调用的makeCtor
// Creates a constructor that has nothing extra in its scope chain. function makeCtor (className) { function constructor () { // Opera has some problems returning from a constructor when Dragonfly isn‘t running. The || null seems to // be sufficient to stop it misbehaving. Known to be required against 10.53, 11.51 and 11.61. return this.constructor.apply(this, arguments) || null; } //<debug>if (className) { constructor.name = className; } //</debug>return constructor; }
好,看不懂了,貌似就是建了一个普通的对象,将类名作为name属性
看来Ext.define就是将类的描述属性信息注册到extjs的类体系中,等Ext.create的时候根据定义的类属性信息开始创建
原文:http://www.cnblogs.com/coolzdp/p/7466971.html
内容总结
以上是互联网集市为您收集整理的extjs define研究全部内容,希望文章能够帮你解决extjs define研究所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。