假设我正在扩展一个标准的 Sencha ExtJS 4 小部件/组件,我发现一堆东西不能按我想要的方式工作,或者它们只是坏了,Sencha 还没有解决问题组件呢。我将使用 Sencha ExtJS Ext.tree.Panel 和 Ext.tree.Store 作为两个示例组件。覆盖构造函数、配置、属性、方法和事件的最基本步骤是什么,以便我可以在不修改我当前使用的核心 ExtJS 4 框架 JS 文件的情况下找到并修复该组件的问题?
我意识到有时框架中的功能太多了,以至于人们可能会忽略某处的配置,而没有意识到他们可以通过标准实现来解决问题。这可以通过更多的框架经验来纠正。撇开这些不谈,这些最基本的步骤是什么?
假设我们从这两个实现开始,从最基本的开始。
仅供参考:我在使用 Ext.Direct 服务器端堆栈的情况下无需太多努力就可以运行这两个组件的核心功能,并且我可以用 IE 解释 Sencha ExtJS Ext.tree.Panel 组件的所有跨浏览器兼容问题, Mozilla Firefox 和 Google Chrome,但我可能会花太多时间问其他问题。我并不是说 IE 首先是刻板印象,因为所有这些浏览器都存在与 Ext.tree.Panel 组件有关的问题。我宁愿在这里学习如何钓鱼,这样我就可以自己钓到鱼了。一旦我更好地理解了这些与树相关的类,我会提出更具体的问题。
http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.TreeStore
自定义 Ext.data.TreeStore 实现:
Ext.define('MyApp.store.TreeNodes', {
extend: 'Ext.data.TreeStore',
xtype: 'store-tree-nodes',
model : 'MyApp.model.TreeNode',
proxy: {
type: 'direct',
directFn: Tree_Node_CRUD.read,
reader: {
root: 'data'
}
},
nodeParam: 'node',
parentField: 'parentId',
root: {
text: 'root',
id: '0',
expanded: true
},
autoLoad: false,
single: true,
listeners: {
beforeload: function(store, operation, options) {
},
append: function( thisNode, newChildNode, index, eOpts ) {
}
}
});
http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.tree.Panel
自定义 Ext.tree.Panel 实现:
Ext.define('MyApp.view.MainTree', {
extend: 'Ext.tree.TreePanel',
xtype: 'view-main-tree',
requires: [
'MyApp.store.TreeNodes'
],
initComponent: function()
{
this.store = 'TreeNodes';
this.superclass.initComponent.call(this);
},
animate: false,
title: 'Tree',
rootVisible: true,
collapsible: true,
dockedItems: [{
xtype: 'toolbar',
items: [{
text: 'Open Node'
}, {
text: 'Create Node'
}, {
text: 'Delete Node'
}, {
text: 'Expand All'
}, {
text: 'Collapse All'
}]
}],
listeners: {
afterrender: function() {
},
itemclick: function(view, node, item, index, e) {
},
afteritemexpand: function() { //node, index, item, eOpts) {
},
afteritemcollapse: function() { //node, index, item, eOpts) {
}
}
});